【问题标题】:Libgdx | Custom ActionLibgdx |自定义操作
【发布时间】:2016-08-06 02:16:05
【问题描述】:

如何在 libgdx 中为演员创建自定义操作?如果我不能,那么至少有一个动作来运行一段自定义代码(例如调用方法动作)吗?谢谢。

编辑: 我创建了这个类:

class GapSizeAction extends TemporalAction {

private float newSize;
private Blocker blocker;

public static GapSizeAction getRotateAction(float newSize, float duration) {
    return new GapSizeAction(newSize, duration);
}

public GapSizeAction(float newSize, float duration) {
    super(duration);
    System.out.println("Construct");
    this.blocker = (Blocker)target;
    this.newSize = newSize;
}

private float start, end;

protected void begin() {
    System.out.println("Begin");
    start = blocker.gap;
}

protected void update(float percent) {
    blocker.gap = (start + (end - start) * percent);
}

}

问题是我正在使用带有间隙成员(浮点数)的自定义演员。我尝试将目标强制转换为阻止程序,以便我可以访问 gap 成员变量,但 gap 最终为空。我可以确认 gap 不为空,我在构造函数中对其进行了初始化。拦截器(自定义参与者)也不为空。我是不是搞错了?

【问题讨论】:

  • 使用 RunnableAction 在您的操作中调用方法。如果您想要一个随着时间逐渐执行某项操作的操作,请扩展 TemporalAction。查看 MoveToAction 源代码,了解如何执行此操作的示例。
  • @Tenfour04 我遇到了麻烦。我实现了 TemporalAction,查看了 MoveToAction,然后创建了一个类。我将编辑上面的代码以显示我所做的。长话短说,这不是工作,更多细节在上面。

标签: libgdx


【解决方案1】:

您的问题是构造函数中的this.blocker = (Blocker)target; 行。调用构造函数时,尚未在目标上设置操作,因此target 为空(blocker 也是如此)。此外,由于您要更改单个浮点数,因此可以扩展 FloatAction 并为自己节省一些代码。我会写你的课如下。构造函数应该为空以支持轻松池化,您可以在静态工厂方法中进行设置。

class GapSizeAction extends FloatAction {

    public static GapSizeAction getRotateAction(float newSize, float duration){
        GapSizeAction action = Actions.action(GapSizeAction.class);
        action.setEnd(newSize);
        action.setDuration(duration);
        return action;
    }

    protected void begin () {
        if (target instanceof Blocker)
            setStart(((Blocker)target).gap);
        else
            Gdx.app.logError("Target is not a blocker: " + target.toString());
        super.begin();
    }

    protected void update (float percent) {
        super.update(percent);
        if (target instanceof Blocker)
            ((Blocker)target).gap = getValue();
    }

}

【讨论】:

    【解决方案2】:

    例如淡入动作:

    actor.AddAction(Actions.fadeIn(2.0f));
    

    【讨论】:

    • 我知道该怎么做,我在问如何创建自定义操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2018-01-24
    • 2021-11-07
    相关资源
    最近更新 更多