我已经定义了一组操作,并且正在尝试将其添加到多个参与者中。代码如下:
ParallelAction actions = new ParallelAction();
RotateByAction rotateAction = new RotateByAction();
rotateAction.setAmount(rotationAmount);
ScaleByAction scaleAction = new ScaleByAction();
scaleAction.setAmount(-0.01f);
DelayAction delayAction = new DelayAction();
delayAction.setDuration(0.05f);
RepeatAction rAction = new RepeatAction();
rAction.setCount(100);
actions.addAction(rotateAction);
actions.addAction(scaleAction);
actions.addAction(delayAction);
rAction.setAction(actions);
for(Monster mon : mons) // mons is ArrayList of type Monster (which extends Image)
mon.addAction(rAction);
但是上面的逻辑只是将 Action 添加到我的 ArrayList 中的最后一个 Actor 。 为什么我不能对多个 Actor 使用相同的 Action ?我是否需要定义与 Actor 一样多的 Action ,还是有其他方法可以做到这一点?
我在这里查看了 Pool https://code.google.com/p/libgdx/wiki/scene2d我好像没掌握住对我的问题有用吗?如果是,那么如何?
最佳答案
因为所有 Actor 都拥有对一个序列的引用。所以每个有序列的 Actor 都会做同样的事情。例如,如果您为 10 个 Actor 使用 1 个 Sprite,并且您确实在 1 个 Actor 中更改了它,则每个其他 Actor 也都会进行更改。因此,如果您将一个序列添加到 10 个 actor,它的速度确实会提高 10 倍,因为来自 actor 的每个 .act()
都会更新序列 (因为在每个 actor.act 内部,它都会更新该序列)按增量时间更新所有操作!)。所以你确实要更新每个 Actor 的序列,这就是它不起作用的原因。你需要为每个正确的 Actor 创建一个新的场景。
只需将您的代码更改为:
for(Monster mon : mons){ // mons is ArrayList of type Monster (which extends Image)
RotateByAction rotateAction = new RotateByAction();
rotateAction.setAmount(rotationAmount);
ScaleByAction scaleAction = new ScaleByAction();
scaleAction.setAmount(-0.01f);
DelayAction delayAction = new DelayAction();
delayAction.setDuration(0.05f);
RepeatAction rAction = new RepeatAction();
rAction.setCount(100);
actions.addAction(rotateAction);
actions.addAction(scaleAction);
actions.addAction(delayAction);
rAction.setAction(actions);
mon.addAction(rAction);
}
这可能在初始化时需要更长的时间,但它应该可以纠正您的错误。
关于android - Libgdx - 操作;向多个参与者添加一个 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855075/