2014-01-10 1 views
0

와 스프라이트를 교체하고 일부 물리학로 이동하는 시간 생각합니다. AndEngine Physics Example을 따라 볼을 볼에 넣기 위해 가속도계를 사용하여 볼을 롤링하는 롤 - 어 - 볼 게임을 시작했습니다. 나는 볼을 굴리는 데 성공했지만 구멍에 떨어 뜨릴 수는 없습니다. 나는 Googled했고, 모든 것을 시험해 보았다. 그러나 내가 얻을 수있는 최고는 구멍과 충돌한다. 그리고 그것 위에서 튀거나, 굴러 간다.는 Andengine Box2D의 지금 년간 내가 AndEngine를 사용하고 다른

여기에 몇 가지 코드가 있습니다.

이것은 내 공입니다.

ball = new AnimatedSprite(pX, pY,this.mBallFaceTextureRegion,this.getVertexBufferObjectManager()); 
    bodyBall = PhysicsFactory.createCircleBody(this.mPhysicsWorld,ball,BodyType.DynamicBody, FIXTURE_DEF); 
    bodyBall.setUserData("Ball"); 
    ball.animate(200); 

    this.mScene.attachChild(ball); 
    this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(ball, bodyBall, true, true)); 

티아는 내 구멍입니다.

hole = new Sprite(pX, pY, this.hHoleFaceTextureRegion, this.getVertexBufferObjectManager()); 
    bodyHole = PhysicsFactory.createCircleBody(this.mPhysicsWorld, hole, BodyType.StaticBody, FIXTURE_DEF); 
    bodyHole.setUserData("Hole"); // ID for hole 
    this.mScene.attachChild(hole); 
    this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(hole, bodyHole, false, false)); 

이 내가 해봤 코드의 일부와 함께 현장 onCreateScene() 안에 내 ContactListener입니다.

this.mPhysicsWorld.setContactListener(new ContactListener() { 
    @Override 
    public void beginContact(final Contact pContact) { 
     final Body BodyA = pContact.getFixtureA().getBody(); 
     final Body BodyB = pContact.getFixtureB().getBody(); 

     if(BodyA.getUserData() == "Ball" && BodyB.getUserData() == "Hole"){ 
      ball.setPosition(hole); 
      // BodyA.setType(BodyType.StaticBody); // bodyBall 
      //mPhysicsWorld.destroyBody(BodyB); // bodyHole 
     }else if(BodyA.getUserData() == "Hole" && BodyB.getUserData() == "Ball"){ 
      ball.setPosition(hole); 
      // BodyB.setType(BodyType.StaticBody); // bodyBall 
      // hole.dispose(); // bodyHole 
     }  
} 

사람은 공 또는 구멍으로 떨어지는 공을 시뮬레이션하는 다른 방법에 대한 구멍을 교환하는 방법을 설명하시기 바랍니다 수 없습니다. 감사합니다 해결하고자

답변

0

.

는 [완전 1 본체 제거]에서 해결책을 찾아 냈다. 홀을 삭제하고 별도의 스레드에서 볼을 리셋해야합니다.
새 메서드 SwapHoleAndBall()을 만들고 beginContact 내에서 호출했습니다.

다음은 수정 된 코드입니다.

public void beginContact(final Contact pContact) { 
     final Body BodyA = pContact.getFixtureA().getBody(); 
     final Body BodyB = pContact.getFixtureB().getBody(); 

     if(BodyA.getUserData() == "Ball" && BodyB.getUserData() == "Hole"){ 
      SwapHoleAndBall(); 
      ...... 

그리고 스왑 방식.

public void SwapHoleAndBall() { 
    final PhysicsConnector physicsConnector = 
      mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(hole); 

     mEngine.runOnUpdateThread(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       if (physicsConnector != null) 
       { 
        bodyBall.setTransform(bodyHole.getPosition(), 0); 
        mPhysicsWorld.unregisterPhysicsConnector(physicsConnector); 
        bodyHole.setActive(false); 
        mPhysicsWorld.destroyBody(bodyHole); 
        mScene.detachChild(hole); 
        bodyBall.setType(BodyType.StaticBody); 
       } 
      } 
     }); 
    } 

다른 사람에게 도움이되기를 바랍니다.

관련 문제