繁体   English   中英

在开发XNA应用程序时,如何避免频繁的int / float / double强制转换?

[英]How can I avoid frequent int/float/double casts when developing an XNA application?

我正在使用XNA Framework为Windows Phone 7(Mango)制作一个简单的2D游戏。

我做了以下观察:

  • 大多数绘图操作都接受float
  • SpriteBatch.Draw接受一个使用intRectangle
  • Math类接受double s作为参数,并返回double s

所以我的代码充满了int s, float s和double s之间的类型转换。 这是一个很多的类型。

有什么方法可以摆脱它们,或者我应该不关心这个?

此外,这些类型转换是否会带来可衡量的性能损失?

我也注意到了这一点,但除非你注意到任何速度降低,否则它可以被认为是微优化。 floatint之间转换是相对昂贵的,而在floatdouble之间转换是便宜的。 因此,无论您何时不需要执行floatint转换,都可以避免它。 类型转换通常比实际转换便宜(例如,使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM