안녕하세요, 차 모양 Rectangle을 다음과 같이 그리는 자동차 게임을 만들고 있습니다. xP와 yP는 JavaScript의 키보드 이벤트에서 동적으로 나오므로 회전도 마찬가지입니다.Rotated Rectangle hit 확인 HTML5 + Javascript 및 Canvas의 고정 모양 사각형이있는 점
ctxDrift.clearRect(0, 0, 426, 754);
ctxDrift.save();
ctxDrift.beginPath();
ctxDrift.translate(xP-car.getWidth()/2, yP-car.getHeight()/2);
ctxDrift.rotate((Math.PI/180) * car.getRotation());
ctxDrift.translate(-xP, -yP);
ctxDrift.rect(xP-car.getWidth()/2, yP-car.getHeight()/2, car.getWidth(), car.getHeight());
ctxDrift.fillStyle = 'yellow';
ctxDrift.fill();
ctxDrift.restore();
이제 회전하지 않는 사각형 모양의 장애물이 있습니다. 이제 어떻게이 두 객체 사이의 히트를 확인할 수 있습니까? 또는 회전하는 경우 직사각형 점을 다른 직사각형 안에 배치하는 방법을 말하면됩니까?
원 충돌 감지 오히려 느린 여기 내 자신의 로직을 추가했습니다. 이런 종류의 테스트를 수행하는 것은 분명히 광범위한 단계 (거친) 충돌 검사를 수행하는 데 적합하지만 수학을 간단하게 (그리고 빠르게) 유지하고 AABB 사각형을 사용하지 않는 이유는 무엇입니까? – Jarrod
@ Jarrod : 음 ... 원형 충돌은 ** 빠릅니다 ** (단지 1 Math.sqrt 및 일부 + - *) 및 ** 간단한 ** (단 1 줄의 코드!)입니다. 거친 충돌 테스트에 동의하지만, OP가 시작되는 것은 간단합니다. 자동차의 긴면이 대부분 앞으로 진행되기 때문에 원의 부정확성이 최소화됩니다 (직사각형과 원 사이의 최소 공간). AABB를 포함하여 "더 나은"테스트를 제안했음을 주목하십시오. 그러나 이러한 코드, 수학 및 CPU 사이클이 훨씬 더 비쌉니다. 또한 AABB 테두리 상자는 45,135,225,315도에서 정사각형이되어 거의 원만큼 정확하지 않습니다! BTW, 나는 AABB를 좋아하고 사용한다! 비용이 많이들뿐입니다! – markE
'Math.sqrt'는 매우 비쌉니다. 봐봐. – Jarrod