Java 实例变量重置其值
此代码显示奇怪的行为。BaseActor类只是按顺序调用:initPhysics、initGraphics和onCreate(仅一次),然后act(针对每个帧)。预期的行为是,在onCreate方法中,我持有Java 实例变量重置其值,java,libgdx,Java,Libgdx,此代码显示奇怪的行为。BaseActor类只是按顺序调用:initPhysics、initGraphics和onCreate(仅一次),然后act(针对每个帧)。预期的行为是,在onCreate方法中,我持有fixX值(实际上是-6),以使用该值设置对象每帧的X位置,从而使对象的X轴保持静态。我在onCreate和act中设置了一个调试点,并适当地调用了他。 什么时候 正如预期的那样,他得到了值6,但在act中,fixX值返回到0。 当我将fixX变量更改为static时,一切正常。我不知道怎么
fixX
值(实际上是-6),以使用该值设置对象每帧的X位置,从而使对象的X轴保持静态。我在onCreate和act中设置了一个调试点,并适当地调用了他。
什么时候
正如预期的那样,他得到了值6,但在act中,fixX
值返回到0。
当我将fixX
变量更改为static时,一切正常。我不知道怎么做。我在Birdator的构造函数上设置了一个系统,以确保只创建一次对象。
Box2D引擎的LIGDX C++代码的JNI接口是一个JNI接口。p>
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
) BaseActor类中有什么?您的代码是在多线程环境中执行的吗?如果是,那么您应该向fixX变量添加一个volatile声明。我猜您每次都在创建一个新的对象实例,因此第二次查看该值时,会看到另一个对象中的值。@Sanjeev:没有什么重要的,只是按该顺序调用方法:initPhysics、initGraphics和onCreate。@Maxim:否,它是单线程的,但我回家后会尝试使用volatile。
1. BaseActor()
2. onCreate() of BirdActor
3. BirdActor() whitch inits the fixX = 0.