何时在 libgdx 中使用 actor?什么是缺点和优点?

2022-09-02 01:07:06

我正在编写简单的太阳系模拟器。这是我的第一个 libgdx 项目。我在主菜单中使用了舞台和Actor,非常方便,尤其是触摸事件处理。但。。。看看这些例子,我看到没有人在实际的游戏逻辑中使用演员。我徘徊着我应该使用actor作为行星类的父级,或者只是写我自己的类。行星是不可触摸的,它们只会在帧之间移动,因此动作MoveBy的第三个参数必须是帧之间的时间。这就是缺点。使用Actor有什么优点?


答案 1

Actor的主要优点是动作,命中测试和触摸事件以及Actor组。

如果您的游戏逻辑需要,操作可以快速轻松地补间。

您可以随时调用 stage.hit(x, y) 来返回第一个 actor,该 actor 返回您为其编写的任何命中逻辑(通常检查 x、y、宽度、高度的边界)。返回此 actor 或 null 以继续迭代 actor 的命中方法,以查找命中的 actor。如果未命中任何执行组件,则返回 Null。

命中用于舞台的触摸事件。演员的触摸方法传递本地坐标,舞台处理对象的重叠,例如,如果一个演员覆盖另一个演员,使得另一个演员不应该收到touchDown,则在覆盖的演员上返回true true,以停止对“下面”的演员调用touchDown。这也将“焦点”放在返回 true 的 actor 上,以便调用 Actor 的 touchUp。

您可以将参与者组合在一起,以将整个参与者组作为一个单元执行操作、触摸事件等。

一些缺点:Actor需要一个阶段,这在一定程度上限制了功能。许多编码人员使用其他逻辑来确定游戏对象状态,而不是 scene2d 操作(例如 box2d)。如果将 Actor 用于游戏对象,则可能需要两个阶段,一个用于 ui,一个用于游戏世界。如果你不使用它们,你可能会使用你自己的SpriteBatch和Camera。请记住,Actor只有一个抽象的Draw方法,因此您仍然需要创建绘制逻辑。您可能会将纹理区域或精灵保留为Actor的私有字段。如果要使用自己的更新逻辑,可以重写 act(float delta) 方法来获取增量时间(如果使用 Actions,则调用 super.act(delta))。

因此,如果您有自己的逻辑,并且不会使用 Stage 提供的大部分内容,请节省一些资源并推出自己的特定于应用程序的解决方案。如果您可以在不限制所需功能的情况下使用某些优点,那么请为游戏逻辑进行第二阶段。


答案 2

推荐