LibGDX batch.draw vs sprite.draw 性能

问题描述

A 和 B 哪个性能更好?

答: batch.draw(sprite,x,y,width,height);

乙: sprite.draw(batch); sprite.setPosition(x,y);

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

解决方法

这些没有等效的结果,因此比较它们的性能没有意义。第一个 (A) 完全忽略 Sprite 的所有特征,如颜色、位置、比例和旋转。永远不应该使用它,并且只能因为不幸的设计决定让 Sprite 成为 TextureRegion 的子类。根据 GitHub 上的评论,我认为 libGDX 的原始创建者承认了一个设计错误。

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

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