Libgdx - 行动;向多个actor添加一个动作

时间:2013-07-25 10:12:19

标签: android action libgdx actor

我已经定义了一组动作,我试图将它添加到多个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我似乎没有抓住它。这对我的问题有用吗?如果是,那怎么样?

1 个答案:

答案 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,但它应该纠正你的错误。