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换出不同类型的资产。
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换出不同类型的资产。