AABB 충돌 해결에 문제가 있습니다.
X 축을 먼저 확인한 다음 Y 축을 분석하여 AABB 교차를 해결합니다. 이것은이 버그를 방지하기 위해 수행되어 오브젝트가 플레이어에 이동하고, 플레이어가 가로 푸시되어야 할 때 http://i.stack.imgur.com/NLg4j.png
현재의 방법은 잘 작동한다. .gif에서 볼 수 있듯이 수평 스파이크가 플레이어를 올바르게 밀어냅니다.
그러나 수직 스파이크가 플레이어로 이동하면 X 축이 먼저 해결됩니다. 이것은 "스파이크를 리프트로 사용하는"것은 불가능합니다.
플레이어가 수직 스파이크 (중력의 영향을 받음)로 이동하면 X 축에 겹침이 없기 때문에 Y 축을 밀었습니다.
제가 시도한 것은 first answer of this link에 설명 된 방법이었습니다. 그러나 스파이크와 움직이는 물체는 속도가 아닌 위치가 변경되어 움직이며 Update() 메서드가 호출 될 때까지 다음으로 예상되는 위치를 계산하지 않습니다. 말할 필요도없이이 솔루션은 작동하지 않았습니다. :(
나는 일 위에서 설명한 경우 모두하는 것은 의도 한대로하는 방식으로 AABB 충돌을 해결하기 위해 필요 이것은 나의 현재의 충돌 소스 코드
입니다
:. http://pastebin.com/MiCi3nA1이나는 것 이 버그가 처음부터 엔진에 남아 있기 때문에 누군가가이 문제를 조사 할 수 있다면 정말 감사드립니다. 그리고 나는 성공없이 좋은 해결책을 찾기 위해 고심하고 있습니다. 이것은 심각하게 나를 밤새 보며 보내고 있습니다. 충돌 코드에서 "재미있는 부분"에 도달하지 못하게하고 게임 논리를 코딩하는 것을 막습니다. (
XNA AppHub 플랫폼 데모에서와 동일한 충돌 시스템을 구현하려고했습니다. 대부분의 항목을 복사하여 붙여 넣습니다. 그러나 "점프"버그는 내 게임에서 발생하지만 AppHub 데모에서는 발생하지 않습니다. [jumping bug : http://i.stack.imgur.com/NLg4j.png]
점프하려면 점프하려면 플레이어가 "onGround"인지 확인한 다음, Velocity.Y에 -5를 추가하십시오.
플레이어의 Velocity.X가 Velocity.Y (다이어그램의 네 번째 패널 참조)보다 높기 때문에 onGround가 true가 아닌 경우 true로 설정되므로 플레이어는 공중에서 점프 할 수 있습니다.
플레이어의 Velocity.X가 절대로 Velocity.X보다 높지 않으므로 AppHub 데모에서는이 문제가 발생하지 않는다고 생각합니다.하지만 실수 일 수 있습니다.
먼저 X 축에서 확인한 다음 Y 축에서 확인하여 해결했습니다. 하지만 제가 위에서 언급 한 것처럼 스파이크와의 충돌은 나사못으로 막힙니다.
여기 gamedev.stackexchange.com에 대한 질문이 있습니다. 답변이 더 있습니다. http://gamedev.stackexchange.com/questions/14486/2d-platformer-aabb-collision-problems?lq=1 – LearnCocos2D