AndEngine,PhysicsWorld没有更新?

时间:2015-01-07 08:02:58

标签: java android andengine

我不完全确定我做错了什么。我之前已多次编写此代码而没有任何问题。问题是物理世界似乎没有更新,我不知道为什么!现在我有一个gameScene类扩展了普通场景,这是onCreate方法:

@Override
    public void create() {


        ParallaxBackground background = new ParallaxBackground(0, 0, 0);
        background.attachParallaxEntity(new ParallaxEntity(0, new Sprite(0, 0, res.BasicBackground, res.vbom)));
        this.setBackground(background);

        test = new Sprite(0, 0, res.GrassRegion, res.vbom);
        FixtureDef fix = PhysicsFactory.createFixtureDef(10f, 0f, 10f);
        Body bod = PhysicsFactory.createBoxBody(physicsWorld, test, BodyType.DynamicBody, fix);

        attachChild(test);



        physicsWorld = new PhysicsWorld(new Vector2(SensorManager.GRAVITY_EARTH, SensorManager.GRAVITY_EARTH), false);


        physicsWorld.registerPhysicsConnector(new PhysicsConnector(test, bod, true, true));
        this.registerUpdateHandler(physicsWorld);


    }

(我删除了很多不必要的东西)我只是有一个基本的测试精灵,以确保物理工作正常(事实并非如此)。该应用程序运行没有任何错误,它只是精灵不会移动,导致我认为它的物理世界的问题正在更新。

正如您所看到的,我将重力设置为在X和Y方向上加速。我这样做是因为我认为可能由于某种原因它不能在一个方向上工作。我想也许我必须在主要活动中设置场景更新?但我不记得我的任何其他应用程序都必须这样做。感谢您的任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:1)

不,this.registerUpdateHandler(physicsWorld);会做得很好。尝试添加:

physicsWorld = new PhysicsWorld(new Vector2(0, AHC.WORLD_GRAVITY), false) {
    @Override
    public void onUpdate(float pSecondsElapsed) {
        super.onUpdate(pSecondsElapsed);
    }
};

在onUpdate中设置一个断点或Log.i(TAG, "hey");来检查它是否会命中它




修改 尝试注册“普通”UpdateHandler,您可以通过两种方式完成:

public class YourGameActivity implements IUpdateHandler{
    ...

    private void yourSetupMethod(){
        registerUpdateHandler(this);
    }

    @Override
    public void reset() {}

    @Override
    public void onUpdate(float pSecondsElapsed) {
        Log.i(TAG, "hey");
    }
}

或者您可以创建一个implements IUpdateHandler然后:

的类
public class YourGameActivity{
    private MyClassThatImplementsIUpdateHandler mInstance;
    ...

    private void yourSetupMethod(){
        registerUpdateHandler(mInstance);
    }
}

它是一样的。
尝试一下,看看它是否记录了什么,如果由于某种原因你不能看到日志使用断点只是为了确定。