C# 在开发XNA应用程序时,如何避免频繁的int/float/double转换?
我正在使用XNA框架为WindowsPhone7(Mango)制作一个简单的2D游戏 我做了以下观察:C# 在开发XNA应用程序时,如何避免频繁的int/float/double转换?,c#,.net,windows-phone-7,xna,windows-phone-7.1,C#,.net,Windows Phone 7,Xna,Windows Phone 7.1,我正在使用XNA框架为WindowsPhone7(Mango)制作一个简单的2D游戏 我做了以下观察: 大多数绘图操作都接受浮动 SpriteBatch.Draw接受使用ints的矩形 Math类接受doubles作为参数,并返回doubles 所以我的代码充满了ints、floats和doubles之间的类型转换。那真是太糟糕了,打字太多了 我有没有办法摆脱他们,或者我不应该关心这些 此外,这些类型广播是否会造成可测量的性能损失?我也注意到了这一点,但除非您注意到任何速度下降,否则可以将其
- 大多数绘图操作都接受浮动
接受使用SpriteBatch.Draw
s的int
矩形
类接受Math
s作为参数,并返回double
sdouble
int
s、float
s和double
s之间的类型转换。那真是太糟糕了,打字太多了
我有没有办法摆脱他们,或者我不应该关心这些
此外,这些类型广播是否会造成可测量的性能损失?我也注意到了这一点,但除非您注意到任何速度下降,否则可以将其视为一种微观优化。在
float
和int
之间转换相对昂贵,而在float
和double
之间转换相对便宜。因此,只要不需要执行float
到int
的转换,就可以避免它。类型转换通常比实际转换便宜(例如,使用Convert.ToInt32
)。
然而,除非您多次执行,否则所有这些都不可能成为瓶颈。此外,来自:
- float、double和int乘法具有相同的性能==>请为应用程序使用正确的数字类型,无需担心
- 这款手机比我用来开发应用程序的电脑慢4到10倍==>用真手机测试,不要相信你的电脑会做数学运算
- 除法比乘法慢8倍!=>不要使用除法,例如尝试使用1/a,然后使用乘法
双倍
,这将解释数学
类接受这些
总而言之,我要说的是,在XNA框架中经常会出现强制转换。当然,它应该尽可能避免,但除非您需要经常执行,否则它不太可能成为游戏的瓶颈,在这种情况下,其他方面可能更容易优化(或者可能需要重新设计游戏结构)。如果您担心矩形转换,有些重载取而代之的是基于浮点的Vector2:
注意,源(纹理)仍然是一个矩形,但这通常是一个静态(不是C#关键字
静态
而是不变的,非动态的)东西。谢谢你的回答!:)我是新来XNA的,不知怎的,我对所有的打字感到“内疚”。是的,我正在一部实际的手机(诺基亚Lumia 800)上进行测试,我没有发现任何性能问题。我知道存在这样的过载,但老实说,矩形的过载在大多数情况下使用起来更方便。:)不反对,但从技术上讲,这是避免它们的一种方法。如果可能,请使用MathHelper
XNA类。它有一些浮动的方法和常量。嗯,那太好了!:)唯一缺少的是三角函数。