2012-11-07 2 views
1

AndEngine (GLES2)에서 시작해서 TouchScreen을 사용하면 간단한 외륜 스프라이트를 만들려고 노력 중이며 연결된 몸체 이동입니다. 그러나 코드를 어떻게 수정하든 관계없이 호출이 발생하더라도 문제의 본문에 대한 호출을 시도 할 때 항상 NullPointerException을 반환합니다.AndEngine에서 몸체를 조작하면 항상 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 엔진은 부드럽게 작동하고 다른 동적 객체 (작은 공)는 패들과 잘 작동합니다.

문제점을 확인할 수없는 경우 코드의 나머지 부분을 게시 할 수 있지만 일주일 동안 문제가 발생하여 실제로 프로젝트에 착수 할 수 있도록 도와 주시면 감사하겠습니다. .

미리 감사드립니다.

+0

모든 코드를 제공 할 수 있습니까? Interface Scene.IOnSceneTouchListener를 구현 중이며 @Override를 사용해야한다고 생각합니다. – Aleksandrs

답변

2

이 줄은 문제가 있습니다. 새롭게 범위를 만들면paddleBody입니다.

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

당신이 터치 이벤트를 위해 그것을 사용하려고

, 당신은 아마 전혀 초기화되지 않은 클래스 수준 paddleBody을 사용하고 있습니다. 그냥 새로운 객체를 생성 방지하기 위해 잘못된 줄에서 Body을 제거 :

paddleBody = PhysicsFactory.createBoxBody(...); 
+0

아, 와우! 나는 그것을 깨닫지 못했습니다. 조심하지 않으면 Java에서 범위를 재정의하는 것이 매우 쉽다는 것을 완전히 잊었습니다. 나는 눈의 여분 세트를 주셔서 감사 드리며, 이제는 문제없이 box2d를 사용할 수있게되었습니다. 고맙습니다! – user1760501

1

paddleBody은 당신의 방법에서 지역 변수입니다. 그것을 세계화하십시오.

관련 문제