何时在libgdx中使用actors?有哪些优缺点?

25

我正在编写一个简单的太阳系模拟器,这是我的第一个libgdx项目。我正在使用一个Stage和Actors来制作主菜单,并且非常方便,特别是触摸事件处理。但是...在查看示例时,我发现没有人在实际游戏逻辑中使用actors。我不知道是否应该将actor用作planet类的父类,还是自己编写一个类。行星不会可触摸,并且它们只会在帧之间移动,因此MoveBy操作的第三个参数必须是帧之间的时间。 这些是缺点。那么使用Actors的优点是什么呢?


5
我认为许多libGDX示例是在引入舞台(Stage)和演员(Actor)支持之前编写的,这可能解释了它们为什么没有使用它。 - P.T.
我曾经想象需要大量固定位置内容和单元格,比如表格,因此在所有东西上都使用了Stage,结果陷入了一片混乱。每帧都要拆除它变得越来越必要,并且我遇到了libgdx资源池耗尽的问题。因此感谢您指出RYO的好处。 - John
1个回答

38
演员的主要优点在于动作、命中测试和触摸事件以及演员组。动作可以快速且轻松地进行补间动画,如果您的游戏逻辑需要的话。您可以随时调用stage.hit(x, y)方法,以返回满足您为其编写的任何命中逻辑(通常使用x、y、宽度、高度检查界限)的第一个演员。返回此演员或null以继续迭代演员的命中方法,寻找命中演员。如果没有击中演员,则返回null。
命中用于舞台的触摸事件。演员的触摸方法将传递本地坐标,并且舞台处理物体的重叠,例如,如果一个演员覆盖另一个演员,使得另一个演员不应接收touchDown,则在覆盖演员上返回true,以停止对“下方”演员的touchDown的调用。这还会在返回true的演员上设置'焦点',以使Actor的touchUp被调用。
您可以将演员分组以执行动作、触摸事件等,将整个演员组作为单个单位。
一些缺点:演员需要一个舞台,这有些限制了功能。许多编码人员使用其他逻辑来确定游戏对象状态,而不是场景2d动作(例如box2d)。如果您使用演员作为游戏对象,则可能需要两个舞台,一个用于ui,一个用于游戏世界。如果您不使用它们,则可能会使用自己的SpriteBatch和Camera。请记住,演员只有一个抽象的Draw方法,因此您仍然需要创建绘制逻辑。您可能会将TextureRegion或Sprite作为演员的私有字段保留。如果您想使用自己的更新逻辑,则可以重写act(float delta)方法以获取时间增量(如果使用Actions,则调用super.act(delta))。
因此,如果您有自己的逻辑并且不会使用Stage提供的大部分功能,则可以节省一些资源并滚动自己的特定应用程序解决方案。如果您可以使用一些优点而不限制所需的功能,则可以为游戏逻辑使用第二个舞台。

1
你可以同时使用Scene2D和box2d,尽管有些事情可能会变得棘手。但总的来说,这是完全可行的,我正在实践中。对于动态对象,您只需从物理模型派生出您的演员位置。当然,这意味着“Action”有点无意义,因为运动只从物理到Actor,而不是相反。但是,您仍然可以免费获得输入处理、事件系统、摄像机处理和坐标映射。Action仍然可以用于没有物理体的视觉元素(例如装备物品、效果精灵等)。 - mxk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接