[英]How can I avoid frequent int/float/double casts when developing an XNA application?
我正在使用XNA Framework为Windows Phone 7(Mango)制作一个简单的2D游戏。
我做了以下观察:
float
SpriteBatch.Draw
接受一个使用int
的Rectangle
Math
类接受double
s作为参数,并返回double
s 所以我的代码充满了int
s, float
s和double
s之间的类型转换。 这是一个很多的类型。
有什么方法可以摆脱它们,或者我应该不关心这个?
此外,这些类型转换是否会带来可衡量的性能损失?
我也注意到了这一点,但除非你注意到任何速度降低,否则它可以被认为是微优化。 在float
和int
之间转换是相对昂贵的,而在float
和double
之间转换是便宜的。 因此,无论您何时不需要执行float
到int
转换,都可以避免它。 类型转换通常比实际转换便宜(例如,使用Convert.ToInt32
)。 但是,除非您多次执行此操作,否则所有这些都不太可能成为瓶颈。 另外,从这篇文章 :
- float,double和int multiplications具有相同的性能==>为您的应用使用正确的数字类型,无后顾之忧
- 手机比我用来开发我的应用程序的PC慢4到10倍==>用真正的手机测试,不要相信你的PC用于数学操作
- 划分比乘法慢8倍! ==>不要使用分区,例如尝试使用1 / a然后乘法
非官方的数字,但我认为最后一个是一个非常被接受的方法。 此外,双打通常被认为比浮点数慢,但这归结为它正在运行的系统。 AFAIK,Windows Phone优化为使用doubles
,这可以解释Math
类接受这些。
总而言之,我会说在XNA框架中看到非常常见的转换。 当然,应该尽可能避免它,但它不太可能成为游戏瓶颈的根源,除非你需要经常执行它,在这种情况下其他区域可能更容易优化(或者可能需要重新设计游戏结构) )。
如果你担心矩形转换,那么有些过载需要Vector2,它们是基于浮点数的:
http://msdn.microsoft.com/en-us/library/ff433988.aspx
请注意,源(纹理)仍然是一个矩形,但这通常是静态的(不是C#关键字static
但不变,不动态)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.