2012-10-10 3 views
1

내 iOS 게임에서 Bullet Physics를 사용하려고합니다. 데모가 제대로 작동한다는 점에서 엔진이 올바르게 컴파일 된 것 같습니다.btRigidBody 객체가 느린 속도로 충돌 할 때 이상하게 동작합니다.

내 게임에는 플레이어의 배와 적함이 있습니다. 그것들은 btRigidBody 객체와 btCollisionObjects로 정의되며 충돌을 위해 btSphereShapes를 사용하고 있습니다.

'빠른'속도에서는 충돌이 현저하게 발생하는 것처럼 보입니다. 모든 것이 충돌하고 '이상한'것은 없습니다. 하지만 속도가 매우 느리고 플레이어의 배가 움직이지 않는 물체에 닿으면 충돌이 발생하지만 플레이어의 배가 다음 몇 프레임 동안 놀라운 속도로 이동하고 충돌 한 곳에서 먼 거리가 나타납니다. 충격 이전에 움직였던 속도.

주위를 움직이게하려면 물리 엔진을 체크하고 getMotionState()를 사용하여 각각의 프레임에서 setLinearVelocity()를 사용하여 내가 가진 렌더링 코드를 업데이트하십시오.

일부 문제는 올바른 질량을 설정하는 방법이나 무엇보다 빠른 속도를 사용하는 방법을 잘 모르는 것 같습니다. 나는 대부분 숫자를 고수하고 어떤 일이 벌어지는 지보고 있습니다.

이런 식으로 글 머리 기호를 사용해야하며 개체의 질량을 결정하기위한 지침이 있습니까? (나는 더 무거운 물체가 더 무거운 물체로 하여금 더 많은 물체를 움직이게 할 것이라고 가정 할 때 맞을 것이다)

답변

0

나는 아직 전문가가 아니지만 setLinearVelocity을 사용하지 않을 것이다. 이것은 단지 초기 상태를위한 것입니다. 한 번은 세계에서, 뭔가를 올바른 방향으로 밀고 싶다면 충격을주십시오. 이것은 보이지 않는 객체에 부딪 치는 것과 같아서 다른 충돌과 완벽하게 호환됩니다. 매 프레임마다 속도를 설정하면 물리 엔진 계산이 완전히 무시됩니다.

두 개의 오브젝트가 겹쳐지면 겹쳐지는 정도와 관련된 힘으로 서로 밀어냅니다. 귀하의 setVelocity 메서드는 개체가 겹치는 원인이되고 결국에는 물리 엔진이 바람직하지 않은 방식으로이 문제를 해결합니다.

나는 우주선 게임을 만들고 있는데, 우주선이 이미 선택한 최대 속도로 움직이지 않는 한, 새로운 방향으로 움직이기위한 충동과 현재 운동 방향을 취소하기위한 충동을 만든다.

관련 문제