2012-02-01 2 views
0

xna 4.0을 사용하여 C#에서 2 차원 게임을 간단하게 만들고 있는데, AABB 충돌 감지 방법을 사용하고 있습니다. 나는이 질문이 매우 기초적이라면 나는 프로그래밍의 초심자이므로 사과하겠습니다.움직이는 스프라이트로 2 차원 스프라이트 충돌 처리 맨 위?

여러 명의 적을 플레이어쪽으로 이동 시켜서 그를 공격하려고합니다.하지만 둘 이상을 추가 할 때마다 충돌과 처리를 관리하는 데 매우 어려움을 겪고 있습니다. 내가 사용하고있는 간단한 사각형 교차 충돌을 어떻게 관리해야합니까? 나는 충돌이 사실로 돌아 왔을 때 이전 위치로 적을 세우려고했으나 많은 펑키 한 것들을했습니다.

도움 주셔서 감사합니다.

답변

1

"이전 위치"조차도 무효화되기 시작할 수 있기 때문에 이전 위치는 일반적으로 여러 번 처리 할 때 가장 잘 작동하지 않습니다.

대신에 충돌하는 객체의 방향에서 객체를 밀어 넣는 것을 고려할 수 있습니다.

http://www.opentk.com/node/869

그것은 AABB의 또 다른를 벗어난 AABB를 밀어 필요한 최소한의 번역을 취

이 문서에서는 XNA 기반이 아니라 무척 유사하다, 적응하기 쉬운해야하는 OpenTK에 방법. 이 작업은 두 개의 객체가 충돌하지 않도록 여러 번 수행해야합니다. 그러나, 기술적으로 플레이어를 이미 수행 한 경우, 예를 들어 적과 플레이어를 확인할 필요가 없습니다. 대신 비교할 필요가있는 모든 AABB를 거쳐 어떤 알고리즘이 이미 비교되었는지 알고있는 알고리즘을 사용하여보다 일반적으로이를 처리 할 수 ​​있습니다. 이 부분은 최적화 단계에 올 수 있습니다.

주문에 대해서도 염두에 두십시오. 이것은 충돌의 우선 순위에 대한 통제가 시작되는 곳입니다. 플레이어의 AABB가 다른 플레이어와 충돌하면 오히려 플레이어가 FIRST 또는 적을 "푸시"할까요? 이러한 세부 사항은 귀하의 구현에 달려 있습니다.

+0

에서 다운로드 할 수 있습니다, 그래서 일을 처리하는이 충돌을 구현하기 위해 노력 ... 그리고 작동하는 것 같다,하지만 때로는 내 스프라이트 약 무작위 점프를 얻을. .. 실제로 콜리 전 핸들러를 호출 할 때와 관련이 있다고 생각합니다. 내가 언제 있어야하니? 또한 도움을 주셔서 감사합니다. –

+0

업데이트 할 때마다 AABB를 두 번씩 호출해야합니다. 충돌을 원합니다. –

+0

나는 그것을했다. 그리고 나는 그것이 불린 후에 어떤 물체도 충돌하지 않는 곳을 가지고있다. 그러나 이상한 방법으로 고쳐 버린다. Sprites는 종종 장소를 바꾼다. –

0

왜 충돌 (및 다른 물리학)을 자동으로 처리하는 Farseer Physics Engine을 사용하지 않습니까? Farseer Physics Engine은 실제 물리 반응을 이용한 충돌 감지 시스템입니다.

Farseer는 모든 충돌을 처리 할 수 ​​있으므로 게임 디자인에 집중할 수 있습니다! (바퀴를 다시 만들지 마십시오 :)

오픈 소스 프로젝트이며 널리 사용됩니다! 이 밖에

샘플의 많은 당신이 좋아 http://farseerphysics.codeplex.com/

관련 문제