安卓使用RectF结构来绘制位图。我正在研究我的游戏结构,例如,Sprite将具有和x/y坐标、宽度、高度、速度等。这意味着每次在我的渲染循环中,当我找出要使用的源/目标RectF时,我都必须将这些整数转换为浮点数。或者,我可以更通用,到处使用浮点数,这样当需要模拟物理和渲染时,所有的类型都已经是同一类型的……即使它对于属性来说是不必要的(我不需要"x position“的浮点数,但如果不需要,就必须在渲染时强制转换它)。
如果浮点数通常是2-10倍的低效(每个http://developer.android.com/guide/practices/performance.html),那么应该采取什么正确的方法呢?
TLDL:我应该在渲染时将整型转换为浮点型,还是应该让所有的变量都是浮点型的,即使浮点型的效率很低?类型转换的效率有多低?
发布于 2012-09-13 00:26:27
要做到这一点,最好的方法是以在指定公差内产生预期结果所需的最高精度进行计算。这意味着如果您需要使用doubles进行计算并获得一致的预期结果,那么就使用它们。找出精度较低的地方,并只使用浮点数执行需要精度的操作。记住,你的世界不必近似地球重力,你可以简化事情,将重力设为10而不是9.81,使像素对应于偶数单位,等等。如果你用相同的单位定义常量,并避免进行单位转换来做数学运算(因为这会导致额外的运算),添加更多的最终常数,比如重力,厘米/秒,米/秒和公里/小时,比只有一个并转换一千次要好。哦,与2个浮点数相乘相比,将int转换为浮点数的成本并不是很高,所以考虑一下这一点。
我还会注意到,FPU在现代android手机中变得越来越普遍,因此使用浮点数学的问题变得不那么重要(尽管不是全部)。
我想要注意的另一件事是Double/Float/Integer与double/float/int。前者需要创建新对象以供使用,并且不应用于数学计算(只要有可能),而后者是原语,不会导致创建新对象以供使用,它们的创建成本较低。
https://stackoverflow.com/questions/12392433
复制相似问题