小编are*_*mes的帖子

将值包含在范围[min,max]中,不分割

在C#中是否有任何方法可以在x_min和x_max之间包装给定值x.该值不应该被夹紧,Math.Min/Max而是像float模数一样包裹.

实现这一目标的方法是:

x = x - (x_max - x_min) * floor( x / (x_max - x_min));
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一个算法或C#方法实现相同的功能而没有划分,并且没有可能出现的浮点限制精度问题,当值远离所需范围时可能会出现这种问题.

c# c#-4.0

9
推荐指数
2
解决办法
1万
查看次数

空指针测试性能

测试C#中的引用类型变量是否为空指针(如if (x == null)...)与测试小于零的整数甚至bool为假的性能有何关系?

是否有关于此类空指针测试的其他问题,例如是否生成了garbadge

我为游戏的每一帧做了数百次这些测试,我想知道这些是否会导致问题或者能否更有效地实施?

c# performance null-pointer c#-4.0

8
推荐指数
1
解决办法
3576
查看次数

如何在没有源代码链接的情况下调试System.StackOverflowException?

最近,我经常遇到类型错误

"未知模块中发生了'System.StackOverflowException'类型的未处理异常."

这发生在一个游戏(我开发)中,具有相当大的代码库(C#/ XNA).但通常只有在玩游戏几分钟后才会出现错误(而不是每次运行).

问题是,不幸的是,Visual Studio调试器似乎无法进一步本地化问题,只是让我检查汇编代码而不参考我的源代码行.怎么可以调试这样的错误?我想像Valgrind这样的工具在C#中不可用.是否有更好的调试器可以显示问题在源代码中的本地化位置?

应用下面建议答案中的步骤时,调用堆栈可用.它是:

ntdll.dll!_NtWaitForSingleObject@12()  + 0x15 bytes 
ntdll.dll!_NtWaitForSingleObject@12()  + 0x15 bytes 
KernelBase.dll!_WaitForSingleObjectEx@12()  + 0xcb bytes    
kernel32.dll!_WaitForSingleObjectExImplementation@12()  + 0x43 bytes    
clr.dll!CLREvent::CreateManualEvent()  - 0x15f3bb bytes 
clr.dll!CLREvent::CreateManualEvent()  - 0x15f37a bytes 
clr.dll!CLREvent::WaitEx()  + 0x47 bytes    
clr.dll!CLREvent::Wait()  + 0x19 bytes  
clr.dll!Thread::WaitSuspendEventsHelper()  + 0xa8 bytes 
clr.dll!Thread::WaitSuspendEvents()  + 0x17 bytes   
clr.dll!Thread::RareEnablePreemptiveGC()  + 0x181977 bytes  
clr.dll!Thread::RareDisablePreemptiveGC()  + 0x38e3 bytes   
clr.dll!Debugger::SendException()  + 0x12b bytes    
clr.dll!Debugger::LastChanceManagedException()  + 0x19f bytes   
clr.dll!NotifyDebuggerLastChance()  + 0x79 bytes    
clr.dll!WatsonLastChance()  + 0x166 bytes   
clr.dll!EEPolicy::HandleFatalStackOverflow()  + 0x189 bytes 
clr.dll!EEPolicy::HandleStackOverflow()  + 0xd8 bytes   
clr.dll!_COMPlusFrameHandler() …
Run Code Online (Sandbox Code Playgroud)

c# xna

7
推荐指数
1
解决办法
4998
查看次数

XML(C++)中的真正二进制块?

是否可以将实际(未编码的字符)二进制块(最好定义的字节顺序和字长)集成到XML文件中?

c++ xml binary encoding

5
推荐指数
1
解决办法
240
查看次数

HLSL着色器的优化

我有一个问题,下面的像素着色器(HLSL)编译为68条指令(使用下面建议的优化).但是,我想将它与着色器模型2一起使用,因此遗憾的是我最多只能使用64条指令.有没有人在不改变着色器结果的情况下看到任何可能的优化?

着色器将屏幕的一个或多或少的球形区域(具有正弦形边界)从RGB转换为白色 - >红色 - >黑色的渐变,并具有一些额外的亮度等修改.

着色器代码是:

// Normalized timefactor (1 = fully enabled)
float timeFactor;

// Center of "light"
float x;
float y;

// Size of "light"
float viewsizeQ;
float fadesizeQ;

// Rotational shift
float angleShift;

// Resolution
float screenResolutionWidth;
float screenResolutionHeight;
float screenZoomQTimesX;

// Texture sampler
sampler TextureSampler : register(s0);

float4 method(float2 texCoord : TEXCOORD0) : COLOR0
{
// New color after transformation
float4 newColor;

// Look up the texture color.
float4 color = …
Run Code Online (Sandbox Code Playgroud)

optimization shader xna hlsl pixel-shader

5
推荐指数
1
解决办法
1283
查看次数

List <T>是否在foreach中用C#创建垃圾

纠正我,如果我错了,但在做一个foreach时,IEnumerable<T>无论T是什么,都会产生垃圾.但我想知道你是否有一个List<T>T是实体.然后说像Entity2D这样的列表中有一个派生类.它是否必须为每个派生类创建一个新的枚举器?因此创造垃圾?

还有一个接口让我们说IEntity作为T创建垃圾?

c# generics performance garbage-collection

4
推荐指数
2
解决办法
2724
查看次数

如何使用SteamWorks API检索Steam用户名?

如何使用Steam API(已启动并运行)获取我的应用程序中当前使用(登录)帐户的Steam用户名.

Steam id可以(例如)通过以下方式获得:

CSteamID id = SteamUser.GetSteamID();
Run Code Online (Sandbox Code Playgroud)

但我找不到获取用户名的方法.

steam steamworks-api

4
推荐指数
1
解决办法
5786
查看次数

如何在Steamworks.NET中做排行榜?

我试图在我的应用程序中包含排行榜(用C#编写的游戏,使用SteamWorks.NET并基于XNA).

Steam正确初始化.

在gamestart上我打电话:

SteamAPICall_t hSteamAPICall = SteamUserStats.FindLeaderboard("Most active beta testers");
leaderboard_BetaTesters_ResultFindLeaderboard = Callback<LeaderboardFindResult_t>.Create(OnLeaderboardFindResult_BetaTesters);
Run Code Online (Sandbox Code Playgroud)

运用

static private void OnLeaderboardFindResult_BetaTesters(LeaderboardFindResult_t pCallback)
{
// See if we encountered an error during the call
if (pCallback.m_bLeaderboardFound == 0)
  {
  Warning.Happened("Leaderboard could not be found / accessed");
  return;
  }
else
  {
  Write.Text("Steam leaderboad connected");
  }
  leaderboard_BetaTesters = pCallback.m_hSteamLeaderboard;
}
Run Code Online (Sandbox Code Playgroud)

在每个Update()中我都会调用:

if (SystemLogic.SteamInitSuccessul()) SteamAPI.RunCallbacks();
Run Code Online (Sandbox Code Playgroud)

但是,永远不会调用OnLeaderboardFindResult_BetaTesters.我究竟做错了什么?

c# xna leaderboard steam steamworks-api

4
推荐指数
1
解决办法
5470
查看次数

HLSL(.fx文件)语法在VS2010中突出显示?

有没有办法在visual studio 2010中为fx文件获取语法高亮(可能类似"格式文档")?没有它,很难调试更复杂的HLSL着色器代码.我知道我可以使用fx编写器,但我宁愿不在不同的开发环境之间切换:-)此外,我经常在VS2010中使用#region编译指示.在VS2010中编辑HLSL着色器代码有类似之处吗?

c# syntax hlsl visual-studio-2010

3
推荐指数
1
解决办法
1336
查看次数

为什么StringBuilder.Equals在这种情况下返回"true"?

我在比较C#(XNA)中的两个StringBuilder时遇到了一个小问题.

StringBuilder sb1;
StringBuilder sb2;
Run Code Online (Sandbox Code Playgroud)

两者都在我的代码的不同部分初始化.一个简单的Console.WriteLine显示它们包含相同的文本.但是,以下是错误的:

sb1.Equals(sb2); // This is false
Run Code Online (Sandbox Code Playgroud)

然而以下是真实的

sb1.ToString().Equals(sb2.ToString); // This is true
Run Code Online (Sandbox Code Playgroud)

怎么会发生这种情况?

c# string stringbuilder equals equals-operator

3
推荐指数
1
解决办法
435
查看次数