我从 AndEngine (GLES2) 开始,我正在尝试制作一个简单的桨精灵,并且在使用 TouchScreen 时它连接的身体移动。但是,无论我如何调整代码,当我尝试对有问题的主体进行调用时,它总是返回 NullPointerException,无论调用是什么。
这是我创建 Paddle 的代码:
// Create the Paddle, body for said paddle, and register with the PhysicsWorld
final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
paddleSprite = new Paddle(mPaddle, getVertexBufferObjectManager());
Body paddleBody = PhysicsFactory.createBoxBody(mPhysicsWorld, paddleSprite, BodyType.DynamicBody, objectFixtureDef);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(paddleSprite, paddleBody, true, false));
paddleBody.setUserData("Paddle");
// .... other Code for initializing sprites ..... //
mScene.attachChild(paddleSprite);
mScene.registerTouchArea(paddleSprite);
mScene.setTouchAreaBindingOnActionDownEnabled(true);
// Method for TouchScreenInteraction
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if(this.mPhysicsWorld != null){
paddleBody.setTransform(new Vector2((pSceneTouchEvent.getX() - paddleSprite.getWidth() / 2)/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT,
(pSceneTouchEvent.getY() - paddleSprite.getHeight() / 2)/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT),
0);
return true;
}
return false;
}
paddleSprite、paddleBody 和physicsWorld 是全局对象,因此访问不是问题。
NullPointerException 在我触摸屏幕的那一刻发生。如果我删除了有问题的函数调用,它会起作用,因为在稍微触摸它之后偶尔会破坏游戏。除了这个问题,Box2D 引擎运行平稳,另一个动态对象(一个小球)与桨的交互也很好。
如果无法从中确定问题,我可以发布其余的代码,但我已经坚持了一周,我非常感谢一些帮助,这样我就可以真正开始项目了。
非常感谢您!