Как очень неопытный программист, я пытаюсь закодировать игру, которая обнаруживает, когда игрок сталкивается с определенными цветами на холсте. У меня есть черный квадрат с координатами «player.x» и «player.y» и размеры 50x50, которые перемещаются, когда вы нажимаете клавиши со стрелками. У меня также есть неподвижный красный (255,0,0) квадрат в другом месте на холсте.JS Canvas-Collision-Detection с использованием getImageData
Функция ниже должна захватить чуть большую площадь вокруг квадрата «игрока» и выяснить, есть ли в нем красный. Если есть, он отправит предупреждение. Проблема в том, что это не работает.
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
До тех пор, пока collideTest() вызывается после того, как холст был полностью отображен, тогда collideTest() - это подходящее место для тестирования hit. Хотя я не знаю о вашей логике программы, если вы знаете координаты + размеры как черного ящика, так и красной рамки, вы можете выполнить тестирование, анализируя их два ограничивающих прямоугольника. – markE