У меня есть (устаревшее) учебное пособие, которое объясняет концепцию призрачного холста, подходящего для идеального обнаружения пикселей.Учебное пособие здесь .Не обращайте внимания на предупреждение о новом учебнике, новый не использует концепцию холста-призрака.
Идея состоит в том, чтобы нарисовать нужное изображение на холсте в памяти, а затем использовать getImageData
, чтобы получить единственныйпиксель щелчка мыши.Затем вы видите, является ли этот единственный пиксель полностью прозрачным или нет.
Если он не полностью прозрачный, значит, у вас есть цель.
Если он полностью прозрачный, нарисуйте следующий объектна холст в памяти и повторите.
Вам нужно только очистить холст в памяти в конце.
getImageData
медленно, но это единственный вариант, если вам нужен пиксель-совершенное обнаружение попадания и ничего не вычисляет заранее.
В качестве альтернативы вы можете предварительно вычислить путь или массив пикселей со смещением.Это будет много работы, но может быть быстрее.Например, если у вас есть изображение 40x20 с некоторой прозрачностью, вы бы вычислили массив [40] [20], который бы имел значение true или false, соответствующее прозрачности или нет.Затем вы проверите это по отношению к положению мыши с некоторым смещением, если изображение нарисовано в (25, 55), вы хотите вычесть это из положения мыши, а затем проверить, является ли новое положение истинным, когда вы смотрите намассив [posx] [posy].
Это мой ответ на ваш вопрос. Мое предложение?Забудьте о точном обнаружении пикселей, если это игра.
Серьезно.
Вместо этого создайте пути (не на холсте, в простом коде JavaScript), которые представляют объекты, но не являются идеальными для пикселейНапример, дом может быть квадратом с треугольником на вершине, который является очень близким приближением изображения, но используется вместо него, когда дело доходит до тестирования удара.Сравнительно чрезвычайно быстро вычислить, если точка находится внутри траектории, чем для точного обнаружения пикселей.Посмотрите на точку в обнаружении правила числа обмоток многоугольника.Честно говоря, это ваш лучший выбор.