【问题标题】:LibGDX Scene2D: Actions won't work at all for actors inside groupsLibGDX Scene2D:动作对组内的演员根本不起作用
【发布时间】:2014-03-28 19:35:19
【问题描述】:

我正在尝试使用 Action FadeOut 将 Actor 淡出。但是,我发现 no 操作对我的对象根本不起作用。我的类的层次结构是这样的:

Actor -> MoveableObject -> Knight

Stage -> KnightGroup (Group) -> Knight

我的骑士演员的动作根本不起作用。但是,我的 KnightGroup 组的操作有效。这是我的骑士的代码:

public class Knight extends Players {
public Knight() {
    setWidth(96);
    setHeight(96);
    setPosition(100, 90);

    //Doesn't work
    AlphaAction action = new AlphaAction();
    action.setAlpha(0f);
    action.setDuration(1f);
    addAction(action);

    //Doesn't work
    addAction(fadeOut(1f));
    addAction(Actions.scaleBy(1f, 1f));
}

@Override
public void act(float delta){
    super.act(delta);
}


@Override
public void draw(Batch batch, float parentAlpha) {
    batch.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
    batch.draw(animation[currentState], getX(), getY(), getWidth(), getHeight());
}
}

我终其一生都无法弄清楚问题所在。 MoveableObject(Knight 的父级)中的操作也不起作用。我最好的猜测是,将演员包装在Group 中会使renderactions 中的那些演员无效。 KnightGroup 是我代码中非常重要的部分,我必须进行大量重构才能将其删除。其他人可以解释一下这个问题吗?

【问题讨论】:

  • 你调用 stage.act(delta) 吗? moveBy/moveTo 操作是否有效?
  • 是的,stage.act(delta) 被调用。一切正常,除了行动。 moveTo 操作也不起作用。
  • 在 act(delta) 的 Players 类中,你调用 super.act(delta) 吗?那个 act(delta) 会回到 Actor.act(float delta),因为 Action.act(delta) 在 Actor.act(delta) 内部被调用
  • 就是这样!我在类层次结构的最顶层缺少一个 super.act() 。在我添加它之后,事情按预期工作。非常感谢你,伙计!
  • 我将其添加为答案,以便您将其标记为已解决。

标签: libgdx action actor scene2d


【解决方案1】:

Actor 类中,方法act(float delta) 调用act(delta) 用于此Actions 的所有注册Actor。所以你必须确保在Actor 的每个子类中调用super.act(delta),以便调用Actor 中的act(delta) 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2014-11-30
    相关资源
    最近更新 更多