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

Ven*_*emo 5 .net c# xna windows-phone-7 windows-phone-7.1

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

我做了以下观察:

  • 大多数绘图操作都接受floats
  • SpriteBatch.Draw接受Rectangle使用ints的
  • Math班接受doubleS作为参数,还返回doubles ^

所以我的代码充满了ints,floats和doubles 之间的类型转换.这是一个很多的类型.

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

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

key*_*rdP 2

我也注意到了这一点,但除非您注意到任何速度下降,否则它可以被视为微观优化。float和之间的转换int相对昂贵,而float和之间的转换double则便宜。因此,只要您不需要执行floattoint转换,就可以避免它。类型转换通常比实际转换便宜(例如使用Convert.ToInt32)。然而,除非您多次执行,否则所有这些都不太可能成为瓶颈。另外,从这篇文章

  • float、double 和 int 乘法具有相同的性能 ==> 为您的应用程序使用正确的数字类型,不用担心
  • 手机比我用来开发应用程序的 PC 慢 4 到 10 倍 ==> 使用真实手机进行测试,不要相信您的 PC 进行数学运算
  • 除法比乘法慢 8 倍!==> 不要使用除法,例如尝试使用 1/a 然后乘法

非官方数字,但我认为最后一个是相当可接受的方法。此外,双精度数通常被认为比浮点数慢,但这取决于它运行的系统。AFAIK,Windows Phone 已针对使用进行了优化doubles,这可以解释Math接受这些的类。

总而言之,我想说,在 XNA 框架中频繁发生转换是很常见的。当然,应该尽可能避免它,但它不太可能成为游戏瓶颈的根源,除非您需要经常执行它,在这种情况下其他区域可能更容易优化(或者可能需要重新设计游戏结构) )。