android - Libgdx - 操作;向多个参与者添加一个 Action

标签 android action libgdx 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); 

但是上面的逻辑只是将 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/

相关文章:

java - 如何为 libGDX 设置 JAVA_HOME?

java - Libgdx intellij 运行时黑屏应用程序

java - LibGDX - 缩放动画

android - 使用 Android GPS 防止估计到达时间退化

java - android.database.sqlite.SQLiteException : no such table: yoga (code 1 SQLITE_ERROR):

android - 在 fragment 中找不到警报对话框的 View

c# - 如何将 void 返回扩展方法传递给动态返回扩展方法?

android - 单击按钮打开 SettingsActivity 的子首选项屏幕

C# MVC 使用 HMAC 签名参数实现 API

java - 浏览器按钮调用 struts2 中提交表单的操作