매우 익숙하지 않은 프로그래머로서 플레이어가 캔버스에서 특정 색상과 충돌 할 때이를 감지하는 게임을 코딩하려고합니다. 좌표가 "player.x"및 "player.y"인 검은 색 사각형과 화살표 키를 누를 때 주위를 움직이는 크기 50x50이 있습니다. 캔버스에 고정 된 빨간색 (255,0,0) 사각형이 있습니다.getImageData를 사용하는 JS 캔버스 충돌 감지
아래 함수는 "플레이어"스퀘어 주위에 약간 큰 사각형을 잡고 빨간색이 있는지 알아 내야합니다. 있다면 경고를 보냅니다. 문제는 이것이 작동하지 않는 것입니다.
function collideTest(){
var canvas = document.getElementById("canvas");
var c = canvas.getContext("2d");
var whatColor = c.getImageData(player.x - 5, player.y - 5,60,60);
for (var i = 0; i < 3600; i++) {
if (whatColor.data[i] == 255) {
alert("red");
}
}
}
나는이 빨간색 픽셀을 감지 할 수있는 가장 효율적인 방법은 아니라고 반 알고 있어요,하지만 난 여기를 게시하기 전에 코드를 단순화하고 싶었다. 함수에 명백하게 잘못된 것이 있습니까?
이 문제는 함수가 호출되는 방식에 달려 있습니다. 사용자 입력을 감지하고 "플레이어"사각형의 좌표를 변경하는 다른 함수의 끝에서 호출됩니다. 이 함수는 모든 것이 캔버스에 그려지기 바로 전에 호출됩니다.
미리 도움을 청하십시오!
답장을 보내 주셔서 감사합니다. 그러나 의심 스럽지만 기능 자체의 내용은 문제가 아닌 것 같습니다. 당신이 거기서 쓴 것을 할 때조차도, 나는 붉은 색을 칠 때 아무런 반응을 얻지 못합니다. 함수가 호출되는 방식의 문제 일 수 있습니까? – trevnewt
canvas가 완전히 렌더링 된 후에 collideTest()가 호출되면 collideTest()가 적중 테스트를 수행하는 데 적합한 장소입니다. 귀하의 프로그램 논리에 대해서는 알지 못하지만, 블랙 박스와 레드 박스의 좌표와 크기를 알고 있다면 두 경계 상자를 분석하여 히트 테스트를 수행 할 수 있습니다. – markE