实例变量重置其值

时间:2014-02-19 12:09:37

标签: java libgdx

此代码显示奇怪的行为。 BaseActor类只按顺序调用:initPhysics,initGraphics和onCreate(仅一次)然后执行(对于每个帧)。预期的行为是在onCreate方法中我保持fixX值(实际上是-6)以使用该值来设置每帧的对象的X位置,以使对象的X轴静态。我在onCreate中设置了一个调试点并且行动起来,他被恰当地调用了。 什么时候

fixX = getBody().getPosition().x;

他获得了值6,正如预期的那样,但是在fixX值的作用下回到0。 当我将fixX变量更改为静态时,事情就像预期的那样。我没有意识到。我将一个System放在BirdActor的构造函数上,以确保该对象只创建一次。 方法setTransform是Libgdx与Box2d Engine的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 个答案:

答案 0 :(得分:1)

问题可能是因为您在构造函数中调用了虚方法。

所以通话清单是:

1. BaseActor()
2. onCreate() of BirdActor
3. BirdActor() whitch inits the fixX = 0. 

因此,在fixX方法之后调用onCreate()初始化。尝试删除fixX初始化(= 0)。