我不完全确定我做错了什么。我之前已经多次编写此代码,没有问题。问题是物理世界似乎没有更新,我不知道为什么!现在我有一个 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 方向上加速。我这样做是因为我认为由于某种原因它可能没有朝一个方向工作。我在想也许我必须在主活动中设置场景以更新?但我不记得必须用我的任何其他应用程序来做到这一点。任何帮助不胜感激,谢谢:)
不,this.registerUpdateHandler(physicsWorld);
会做得很好。尝试添加以下内容:
physicsWorld = new PhysicsWorld(new Vector2(0, AHC.WORLD_GRAVITY), false) {
@Override
public void onUpdate(float pSecondsElapsed) {
super.onUpdate(pSecondsElapsed);
}
};
并在 Update 中放置断点或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);
}
}
是一样的。
尝试一下,看看它是否记录了一些东西,如果由于某种原因你看不到日志使用断点只是为了确保。