我已经定义了一组动作,我试图将它添加到多个actor中。这是代码:
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);
但是上面的逻辑只是将动作添加到我的ArrayList中的最后一个actor。 为什么我不能对多个演员使用相同的动作?我是否需要定义与演员一样多的动作,还是有其他方法可以做到这一点?
我在这里看了游泳池https://code.google.com/p/libgdx/wiki/scene2d我似乎没有抓住它。这对我的问题有用吗?如果是,那怎么样?
答案 0 :(得分:4)
因为所有Actors都可以引用一个序列。所以每个拥有序列的Actor都会这样做。例如,如果你为10个演员使用1个Sprite并且你在1个演员中进行了更改,那么每个其他演员也会有变化。因此,如果你向10个actor添加一个序列,它确实会加速10倍,因为来自actor的每个.act()
都会更新序列(因为在每个actor内部。它确实通过delta更新所有Actions时间!)。所以你确实更新了每个演员的序列,这就是为什么它不起作用。你需要为每个正确的演员创建一个新的序列。
只需将您的代码更改为:
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);
}
这可能需要更长的时间在init,但它应该纠正你的错误。