Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在开发XNA应用程序时,如何避免频繁的int/float/double转换?_C#_.net_Windows Phone 7_Xna_Windows Phone 7.1 - Fatal编程技术网

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

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之间的类型转换。那真是太糟糕了,打字太多了 我有没有办法摆脱他们,或者我不应该关心这些 此外,这些类型广播是否会造成可测量的性能损失?我也注意到了这一点,但除非您注意到任何速度下降,否则可以将其

我正在使用XNA框架为WindowsPhone7(Mango)制作一个简单的2D游戏

我做了以下观察:

  • 大多数绘图操作都接受浮动
  • SpriteBatch.Draw
    接受使用
    int
    s的
    矩形
  • Math
    类接受
    double
    s作为参数,并返回
    double
    s
所以我的代码充满了
int
s、
float
s和
double
s之间的类型转换。那真是太糟糕了,打字太多了

我有没有办法摆脱他们,或者我不应该关心这些


此外,这些类型广播是否会造成可测量的性能损失?

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

  • float、double和int乘法具有相同的性能==>请为应用程序使用正确的数字类型,无需担心
  • 这款手机比我用来开发应用程序的电脑慢4到10倍==>用真手机测试,不要相信你的电脑会做数学运算
  • 除法比乘法慢8倍!=>不要使用除法,例如尝试使用1/a,然后使用乘法
非官方的数字,但我认为最后一个是一个相当公认的方法。此外,双打通常被认为比浮球慢,但这取决于它运行的系统。好吧,Windows Phone优化为使用
双倍
,这将解释
数学
类接受这些


总而言之,我要说的是,在XNA框架中经常会出现强制转换。当然,它应该尽可能避免,但除非您需要经常执行,否则它不太可能成为游戏的瓶颈,在这种情况下,其他方面可能更容易优化(或者可能需要重新设计游戏结构)。

如果您担心矩形转换,有些重载取而代之的是基于浮点的Vector2:


注意,源(纹理)仍然是一个矩形,但这通常是一个静态(不是C#关键字
静态
而是不变的,非动态的)东西。

谢谢你的回答!:)我是新来XNA的,不知怎的,我对所有的打字感到“内疚”。是的,我正在一部实际的手机(诺基亚Lumia 800)上进行测试,我没有发现任何性能问题。我知道存在这样的过载,但老实说,矩形的过载在大多数情况下使用起来更方便。:)不反对,但从技术上讲,这是避免它们的一种方法。如果可能,请使用
MathHelper
XNA类。它有一些浮动的方法和常量。嗯,那太好了!:)唯一缺少的是三角函数。