在AndEngine中,操作主体总是返回NullPointerException

时间:2012-11-07 22:20:36

标签: android opengl-es-2.0 box2d andengine

我开始使用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引擎运行平稳,另一个动态物体(一个小球)与桨叶相互作用就好了。

如果问题无法从此确定,我可以发布剩下的代码,但是我已经坚持了一个星期,我真的很感激一些帮助,所以我真的可以开始使用项目了。

非常感谢你!

2 个答案:

答案 0 :(得分:2)

这一行就是你的问题。您正在创建一个新的本地范围 paddleBody

Body paddleBody = PhysicsFactory.createBoxBody(...);

当您尝试将其用于触摸事件时,您正在使用可能尚未初始化的类级别paddleBody。只需从违规行中删除Body即可避免创建新对象:

paddleBody = PhysicsFactory.createBoxBody(...);

答案 1 :(得分:1)

paddleBody是方法中的局部变量。让它全球化。