在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#中的引用类型变量是否为空指针(如if (x == null)...)与测试小于零的整数甚至bool为假的性能有何关系?
是否有关于此类空指针测试的其他问题,例如是否生成了garbadge?
我为游戏的每一帧做了数百次这些测试,我想知道这些是否会导致问题或者能否更有效地实施?
最近,我经常遇到类型错误
"未知模块中发生了'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) 是否可以将实际(未编码的字符)二进制块(最好定义的字节顺序和字长)集成到XML文件中?
我有一个问题,下面的像素着色器(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) 纠正我,如果我错了,但在做一个foreach时,IEnumerable<T>无论T是什么,都会产生垃圾.但我想知道你是否有一个List<T>T是实体.然后说像Entity2D这样的列表中有一个派生类.它是否必须为每个派生类创建一个新的枚举器?因此创造垃圾?
还有一个接口让我们说IEntity作为T创建垃圾?
如何使用Steam API(已启动并运行)获取我的应用程序中当前使用(登录)帐户的Steam用户名.
Steam id可以(例如)通过以下方式获得:
CSteamID id = SteamUser.GetSteamID();
Run Code Online (Sandbox Code Playgroud)
但我找不到获取用户名的方法.
我试图在我的应用程序中包含排行榜(用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.我究竟做错了什么?
有没有办法在visual studio 2010中为fx文件获取语法高亮(可能类似"格式文档")?没有它,很难调试更复杂的HLSL着色器代码.我知道我可以使用fx编写器,但我宁愿不在不同的开发环境之间切换:-)此外,我经常在VS2010中使用#region编译指示.在VS2010中编辑HLSL着色器代码有类似之处吗?
我在比较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# ×7
xna ×3
c#-4.0 ×2
hlsl ×2
performance ×2
steam ×2
binary ×1
c++ ×1
encoding ×1
equals ×1
generics ×1
leaderboard ×1
null-pointer ×1
optimization ×1
pixel-shader ×1
shader ×1
string ×1
syntax ×1
xml ×1