1

私はAndEngine(GLES2)から始めて、単純なパドルスプライトを作成しようとしています。タッチスクリーンを使用すると、接続されたボディが動きます。ただし、コードをどのように微調整しても、問題の本体で呼び出しを行おうとすると、呼び出しがどのようなものであっても、常にNullPointerExceptionが返されます。

パドルを作成するための私のコードは次のとおりです。

// 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エンジンはスムーズに動作し、別の動的オブジェクト(小さなボール)がパドルとうまく相互作用します。

これで問題を特定できない場合は、残りのコードを投稿できますが、これを1週間続けているので、実際にプロジェクトを開始できるように、助けていただければ幸いです。

事前にどうもありがとうございました!

4

2 に答える 2

2

ここにあるこの行があなたの問題です。ローカルスコープ の新しいを作成していますpaddleBody

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

タッチイベントに使用しようとすると、paddleBodyおそらくまったく初期化されていないクラスレベルを使用していることになります。Body新しいオブジェクトの作成を避けるために、問題のある行からを削除するだけです。

paddleBody = PhysicsFactory.createBoxBody(...);
于 2012-11-08T14:35:25.140 に答える
1

paddleBody はメソッド内のローカル変数です。グローバルにします。

于 2012-11-09T15:17:25.043 に答える