Libgdx |自定义操作

Libgdx |自定义操作,libgdx,Libgdx,如何在libgdx中为参与者创建自定义操作?如果我不能,那么是否至少有一个操作来运行自定义代码段(例如调用方法操作)?谢谢 编辑: 我创建了这个类: class GapSizeAction extends TemporalAction { private float newSize; private Blocker blocker; public static GapSizeAction getRotateAction(float newSize, float duration) {

如何在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);
}

}

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

淡入行动例如:

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

您的问题是行
this.blocker=(blocker)目标代码。调用构造函数时,操作尚未在目标上设置,因此
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();
    }

}

使用RunnableAction在操作中调用方法。如果你想要一个动作随着时间的推移逐渐完成某件事,那就延长时间动作。查看MoveToAction源代码以获取如何执行此操作的示例。@Tenfour04我遇到了问题。我实现了临时动作,查看了MoveToAction,然后创建了一个类。我将编辑上面的代码以显示我所做的。长话短说,上面有更多的细节。我知道怎么做,我在问如何创建自定义操作。