如何在libgdx中为actor创建自定义动作?如果我不能,那么至少要有一个动作来运行自定义代码(例如,调用方法动作)?感谢。
编辑: 我创建了这个类:
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)的自定义actor。我尝试将目标转换为阻塞程序,以便我可以访问gap成员变量,但gap最终为null。我可以确认gap不是null,我在构造函数中初始化它。阻止程序(Custom actor)也不为null。我是不是错了?
答案 0 :(得分:2)
您的问题是构造函数中的行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();
}
}
答案 1 :(得分:-1)
淡入淡出行动例如:
actor.AddAction(Actions.fadeIn(2.0f));