빠른 물체가 벽을 통과하지 못하도록 충돌 감지를 어떻게 처리합니까?


14

2d sidecrolling shooter를 만들고 있는데 총알의 충돌 감지에 약간의 문제가 있습니다. 글 머리 기호를 포함한 모든 것은 자체 다각형 / 업데이트 방법이있는 객체입니다.

문제는 총알이 빠르게 진행되고 초당 60 프레임 (게임에서 실행되는 속도)에서 총알이 업데이트 간격 동안 벽의 너비보다 더 많이 이동하기 때문에 벽을 통해 바로 건너 뛰는 경우가 있다는 것입니다. 다각형이 실제로 겹치지 않기 때문에 계속 행복하게 진행하십시오.

이것에 대해 어떻게해야합니까? 내가 생각해 낼 수 있었던 유일한 것은 이전 위치에서 새 위치로 선을 그려 충돌 감지를 수행하는 것이지만 충돌 감지를위한 선 그리기는 slick2d 설명서에서 권장하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?


완전한 답변이 아니므로 의견. 나는 그래픽으로 선을 그리는 것을 권장하지 않지만 수학적으로 충돌이 발생했는지 확인하기 위해 간단한 광선 평면 교차로를 수행 할 수 있습니다. 그런 다음 작은 고정 단계 감지를 수행하여 충돌이 발생했을 때 정확한 순간 (및 이와 함께 제공되는 모든 정보)을 얻을 수 있습니다. 비용이 덜 드는 점검을 수행 한 다음 필요한만큼 정확한 답변을 얻는 데 시간을 투자하십시오.
James

답변:


9

표준 접근 방식은 다음 중 하나입니다.

  1. 경계 너비를 늘리거나 한 번의 업데이트로 벽을 뛰어 넘을 수 없도록 총알의 최대 속도를 줄이십시오 (최대 피타고라스가 최대 거리 / 최소 경계 너비를 알아 내야 함).
  2. 움직이는 물체보다 앞선 (2) 또는 평면 (3D) 표면과의 충돌을 감지하기 위해 일반적으로 레이 캐스팅을 통해 연속 충돌 감지 (CCD)를 수행합니다. 이것은 더 비싸지 만보다 균형 잡힌 솔루션입니다. 2D 선에 대한 레이 캐스팅은 매우 기본적이지만이 경우 모든 경계를 직선 다각형으로 정의해야합니다.

그 문제를 위해, left4kdead 와 같이 게임의 모양과 느낌에 맞는 경우 총알을 광선으로 모델링 할 수 있습니다 . 그렇게하면 총알이 이미 광선이기 때문에 총알을 광선으로 근사화 할 필요가 없습니다. 모양의 관점에서 볼 때, 글 머리 기호 끝에 밝은 점이있는 선을 그리거나 선을 밝은 (글 머리 기호)에서 어두운 (꼬리 끝)으로 그라디언트로 그리면 괜찮습니다. 운동.

필자는 대부분의 상황에서 충돌 감지를 위해 그래픽을 사용하는 것이 약간 잘못 안내되었지만 픽셀 완벽 충돌 감지는 그와 정확히 일치하며 허용되는 기술이라는 데 동의합니다. 나는 그것이 당신이 달성하고자하는 것과 얼마나 빨리 달려 있는지에 달려 있다고 생각합니다. 몸과 행동이 많은 매우 빠른 게임이 필요하지 않으면 가십시오. 위에서 설명한 접근법 중 하나를 사용하는 것이 좋습니다.


큰 답변에 감사드립니다. 이상적으로는 많은 움직이는 물체와 빠르게 진행되고 싶습니다. 총알을 실제 물체로 취급하는 이유는 다른 모든 것과 같이 중력의 영향을 받기 때문입니다 (총알의 속도 등에 따라 약간 아래로 호). 이것이 좋은 방법이 아닙니까? 이것은 내 첫 게임이므로 여전히 모범 사례를 찾기 위해 사냥하고 있습니다. 포물선 방정식을 사용할 수도 있지만 총알의 속도 / 조준 각도와 관련된 계수를 어떻게 설정했는지 잘 모르겠습니다.
Mala

3
글 머리 기호에 대해 너무 자세하게 들립니다. 실제로는 총알을 발사 할 때 리 코치 힘, 리치 체 각도 예측 불가 등으로 인해 슬러그가 발견되지 않을 수도 있습니다. 나는 그것들을 사라지거나 리코 rico 한 다음 곧 사라질 것이다. 핵심 게임 플레이에 집중하고 작은 세부 사항에 대해 너무 걱정하지 마십시오. 사실은 가장 중요한 것에 중점을 둡니다.
엔지니어

예, 나는 총알에 직선을 사용할 수 있고 중요하다고 생각되면 약간 나중에 아래쪽으로 곡선을 만드는 방법을 찾을 수 있다고 가정합니다.
Mala

2
총알의 속도가 아닌 경우 (즉,하지 너무 빨리 당신이 그들을 화면을 가로 질러 여행을 볼 수 없을 것이다) 고 여전히 간단한 광선을 사용하여 충돌 감지를 모델링하는 동안, 당신은 그들의 속도에 중력을 적용 할 수 있습니다. 사용자는 총알이 더 이상 일련의 직선으로 움직이고 있음을 알지 못하고 다른 모든 객체가 어떻게 동일한 지 알 수 있습니다. 총알 트레일의 경우 곡선 트레일 (스플라인)을 계산하고 그리는 것은 어렵지 않으며 총알의 궤도에 대한 부드러운 곡선의 착시를 증가시킵니다.
Sean Middleditch

3

총알이 실제 물체처럼 작동하도록하려면 (예 : 총알이 총기보다는 발사기의 화살이나 돌과 비슷합니다) 물리 업데이트 빈도를 높이려고 시도 할 수도 있습니다.

따라서 게임이 초당 60 프레임으로 실행되는 동안 물리 시뮬레이션은 초당 120 회 업데이트로 실행될 수 있습니다 (여기서 유비쿼터스 는 렌더링 루프와 다른 속도로 실행할 수있는 우수한 물리 설정을 설명하는 타임 스텝 기사를 수정합니다 ).

물론 물리 엔진의 업데이트 간격을 늘리면 CPU에 더 큰 부하가 가해집니다. 따라서이 접근 방식은 발사체가 매우 빠르게 움직이지 않는 경우에만 합리적입니다 (발사체가 원호로 움직이는 것을 알 수 있기 때문에 가정했습니다).


감사! 나는 효과적으로 (선 모양의 발사체를 사용하여) 이것을하고 있고 게임이 더 복잡 해짐에 따라 그것이 실현 가능하기를 바라고 있습니다.
Mala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.