添加另一个操作后,Libgdx actor位置重置

时间:2017-09-13 18:30:34

标签: java libgdx

我正在使用Actors(Labels,要进行精简)和Actions制作一些简单的动画。 我最初的计划是将其中一个立即向左移动,然后通过屏幕边缘平滑地显示,替换另一个。但是每次执行一个新动作时,Label的位置都会重置,所以我无法获得我计划的效果。我该如何避免呢? 这是代码,如果你需要它:

    newAttack.addAction(Actions.moveBy(-1 * game.W, 0));
    newAttack.setText(game.local.get(_attack));
    newAttackType.background = game.skin.getDrawable("attack_" + getAttackType(_attack));
    lastAttack.addAction(Actions.sequence(Actions.moveBy(game.W, 0, 1.5f),
            Actions.run(new Runnable() {
            public void run() {
                System.out.println(lastAttack.getX() + " " + lastAttack.getY());
                newAttack.addAction(Actions.sequence(Actions.moveBy(game.W, 0, 1.5f), Actions.run(new Runnable() {
                public void run() {
                        lastAttack.addAction(Actions.moveBy(-1 * game.W, 0));
                        newAttack.addAction(Actions.moveBy(-1 * game.W, 0));
                        System.out.println(lastAttack.getX() + " " + lastAttack.getY() + "\n" + "--");
                        lastAttack.setText(game.local.get(_attack));
                        lastAttackType.background = game.skin.getDrawable("attack_" + getAttackType(_attack));
                    }
            })));
        }
    })));

1 个答案:

答案 0 :(得分:1)

这可能不起作用,但查看Label.setText()的源代码会发现该方法会调用Actor.invalidateHierarchy。这意味着包含lastAttack演员的任何内容都会重置lastAttack的位置。

因此,在之前添加之前的操作时,您正在调用Label.setText(),此位置将被重置,然后这些操作将无法正常运行。

您应该尝试设置文本,然后将actor的位置设置为屏幕外,然后在Action中添加幻灯片。