LibGDX中的绘图存在很大问题。首先,我不会在游戏中使用每一个物理或其他复杂的东西。我只绘制精灵并将矩形放在此处以进行碰撞检测。我的游戏中有3个屏幕:飞溅,菜单和游戏。所以我在启动和菜单屏幕中使用了一个舞台,但是如果我在游戏中使用舞台或者使用SpriteBatch绘制,我也不会这样做?舞台在动作方面确实很有优势,但使用Actors会更复杂一些。还有其他方法吗?我不想使用World,因为它会让游戏开始变得复杂化。 我想用什么游戏?
答案 0 :(得分:18)
实际上,您始终使用SpriteBatch
进行绘制,因为Stage
使用自己的SpriteBatch
。如果您认为自己可能需要Scene2d
Stage
的某些优势,例如Action
s,Group
或其他内容,则应使用Stage
。在我看来,这很容易使用。您拥有自己的对象,扩展Image
或Actor
,覆盖其update(delta)
方法,您可以在其中检查Actor
是否应移动(Keypressed或AI事件) 。你也应该检测那里的碰撞并注意它们。然后,如果您要延长Image
,则无需关心绘图(但Image
需要Drawable
s,因此Animation
s会遇到一些问题,如果您正在延长Actor
覆盖draw(SpriteBatch batch)
,您可以在其中调用batch.draw(...)
。
而已。
Stage
的一大缺点是排序。首先绘制的Actor
位于后台。最后Actor
透支了所有其他人并且在前景中。您可以使用z-Index对它们进行排序,但这不是很确定。
因此,您可以决定使用自己的Stage
种类(它或多或少是一个包含所有Actor
的列表,当调用update
或draw
时,它为此列表中的每个Actor
调用,并在那里添加自己的排序。
这取决于您的游戏设计,您的意见和风格。查看一些教程/示例,并决定如何创建游戏。
答案 1 :(得分:12)
您可以使用其中之一,这取决于您创建的游戏类型。但无论如何,不创建 SpriteBatch
的多个实例 - 而只创建一个并将其传递给Stage
构造函数,因为它是重物。 (是的,Stage
使用引擎盖下的SpriteBatch
)
此外,如果您需要任何屏幕控制(按钮,操纵杆等),Stage
可能非常有用,因为您可以使用scene2d.ui
中的类而不重新发明轮子(一些轮子不是很容易重新发明)