此代码显示奇怪的行为。 BaseActor类仅按顺序调用:initPhysics,initGraphics和onCreate(仅一次),然后行动(针对每个帧)。预期的行为是,在onCreate方法中,我持有fixX
值(实际上是-6)以使用此值设置每帧对象的X位置,以使对象的X轴静态。我在onCreate上放置了一个调试点并采取行动,他被恰当地称为。
什么时候
fixX = getBody().getPosition().x;
他按预期获得了值6,但实际上
fixX
值又回到了0。当我将
fixX
变量更改为static时,事情将按预期进行。我不知道怎么做。我将系统放在BirdActor的构造函数上,以确保对象仅创建一次。body的setTransform方法是一个使用Box2d Engine的Libgdx C ++代码的Jni接口。
public class BirdActor extends BaseActor {
private float fixX = 0;
public BirdActor() {
System.out.println("Created");
}
@Override
protected Body initPhysics() {
return Assets.scene.getNamed(Body.class, "bird").get(0);
}
@Override
protected void onCreate() {
fixX = getBody().getPosition().x;
}
@Override
public void act() {
getBody().setTransform(fixX, getBody().getPosition().y, 0);
super.act();
}
@Override
protected Sprite initGraphics() {
Sprite sprite = new Sprite(Assets.textureBird);
return sprite;
}
}
最佳答案
问题可能是因为您在构造函数中调用了虚方法。
因此,通话清单为:
1. BaseActor()
2. onCreate() of BirdActor
3. BirdActor() whitch inits the fixX = 0.
因此,在
fixX
方法之后调用onCreate()
初始化。尝试删除fixX
初始化(= 0
)。