LibGDX batch.draw 对比 sprite.draw 表现

LibGDX batch.draw vs sprite.draw performance

A和B哪个性能更好?

答: batch.draw(精灵, x, y, 宽度, 高度);

B : sprite.draw(批次); sprite.setPosition(x,y);

可能涉及旋转或调整大小。 如果您考虑的是性能而不是便利性,那会更好?

这些没有相同的结果,因此比较它们的性能没有意义。第一个 (A) 完全忽略了 Sprite 的所有特征,如颜色、位置、比例和旋转。它永远不应该被使用,并且只可能因为不幸的设计决定让 Sprite 成为 TextureRegion 的子 class。根据 GitHub.

上的评论,我认为 libGDX 的原创者承认了一个设计错误

在我看来,Sprite class 在大多数情况下根本不应该使用,因为它将 TextureRegion(图像资产)与游戏世界对象(模拟数据)混为一谈。您应该定义自己的 GameObject class,它有一个 TextureRegion 变量和您正在使用的特性(宽度、高度、比例等)的变量。然后使用任何一个 batch.draw 重载来绘制它,该重载具有您使用的所有特征的参数。

为了更进一步,您可以编写自己的 Drawable 抽象包装器 class,它可以具有用于保存 TextureRegion 或 Animation<TextureRegion> 的变体。然后你的GameObject可以引用一个Drawable,你可以轻松地为一个GameObject换出不同类型的资产。