2015-02-06 7 views
1

내 게임 장면은 정적 몸체 인 벽 4 개와 운동 학적 유형이며 수평으로 만 움직이는 플랫폼 플레이트 1 개로 구성되어 있습니다 (아래 그림 참조).기구학 물리 기관이 정적 인 신체를 통과하지 못하도록하는 방법은 무엇입니까?

enter image description here

플랫폼 신체 움직임은 가속 센서에 기초하여,이 코드

@Override 
public void onAccelerationChanged(AccelerationData pAccelerationData) { 
    mPlatformBody.setLinearVelocity(pAccelerationData.getX() * 10, 0); 
} 

플랫폼되는 말아야 경계 벽 꺼지면 내 문제 참조. 이 문제를 해결하기 위해 일단 경계를 벗어나려고하면 속도를 0으로 설정했습니다. 이 코드 위의 코드와

Rectangle rect = new Rectangle(camWidth/2 - 40, camHeight/2 - 5, 
     80, 10, mEngine.getVertexBufferObjectManager()) { 
    @Override 
    protected void onManagedUpdate(float pSecondsElapsed) { 

     if (this.getX() <= 1) { 
      mPlatformBody.setLinearVelocity(0, 0); 
     } 

     if ((this.getX() + 80 >= camWidth - 1)) { 
      mPlatformBody.setLinearVelocity(0, 0); 
     } 

     super.onManagedUpdate(pSecondsElapsed); 
    } 
}; 

, 여전히 수는 화면 밖으로 이동이 플랫폼을 참조하십시오.

누구든지이 문제를 어떻게 극복 할 수 있습니까?

+0

, 당신은 다시 속도를 0으로 설정합니다. 그것은 느려질 것이지만 여전히 움직일 것입니다. – LearnCocos2D

+0

@ LearnCocos2D 어떻게 자세를 재설정 할 수 있습니까? 내가 아는 한 최대로 box2d는 몸체를 수동으로 배치 할 수있는 방법을 제공하지 않습니다. –

+0

b2Body의 SetTransform 기능을 사용하여 본문의 위치를 ​​설정할 수 있습니다. – iforce2d

답변

0

@ LearnCocos2D에 명시된 바와 같이, 화면을 떠날 때 플랫폼 본문을 올바른 위치로 재설정해야합니다. 이를 위해 Body 클래스의 setTransform 메소드를 사용해야합니다 (@ iforce2d가 말한대로).

setTransform을 다루는 데는 두 가지 중요한 점이 있습니다.

  • AndEngine 사용 는 왼쪽 상단 스프라이트 닻을하지만 Box2D의 시체의 닻 중심을 사용한다.
  • Box2d는 미터를 단위로 사용하므로 모든 픽셀 유닛을 미터 단위로 변환해야합니다.

예 : 우리는 (픽셀) (3, 4) 지점으로 본체 본체 이동한다고 가정.

float x = 3; // in pixels (AndEngine unit) 
    float y = 4; // in pixels (AndEngine unit) 
    float wD2 = sprite.getWidth()/2; 
    float hD2 = sprite.getHeight()/2; 
    float angle = body.getAngle(); // preserve original angle 

    body.setTransform((x + wD2)/PIXEL_TO_METER_RATIO_DEFAULT, 
         (y + hD2)/PIXEL_TO_METER_RATIO_DEFAULT, 
         angle); 

PIXEL_TO_METER_RATIO_DEFAULT 즉, 그렇지 않으면 조금 이동, 약간의 속도를 얻을 것입니다, 당신은 또한 이전하거나 벽의 경계 외부에서 사용했던 자신의 위치를 ​​재설정해야 할 32