Есть ли уловка, чтобы определить, нажимает ли пользователь данный элемент в холсте? Например, я показываю ромб из файла .png с прозрачным фоном, и я хочу знать, щелкнуть ли пользователь внутри или снаружи этой фигуры (например, столкновения с элементом мыши).Нажмите на данный элемент в холсте
ответ
В холсте нет понятия отдельных элементов - это просто область, на которую вы рисуете пиксели. SVG, с другой стороны, состоит из элементов, которые вы можете привязать к событиям. Однако есть несколько подходов, которые можно предпринять, чтобы добавить событие нажатия на холст:
Позиция HTML-элемент, который перекрывает область на холст вы хотите быть интерактивными. A для прямоугольной области или карты изображения для чего-то более нерегулярного.
Используйте отдельные холсты для каждого элемента, который вы хотите кликать.
CAKE - Я не использовал это самостоятельно, но это описание «SVG без XML». Это может удовлетворить ваши потребности. Demos здесь http://glimr.rubyforge.org/cake/canvas.html#EditableCurve
Одна идея состоит в том, чтобы сделать изображение на временный холст, а затем использовать getImageDate(), чтобы получить данные для пикселя вы заинтересованы, и проверить, если его альфа-значение 0 (= прозрачный) ,
Ниже представлен эскиз решения. Предполагается, что ...
- х и у координаты события щелчка мыши
- вы зацикливание над геймобжекты, текущий объект будет храниться в переменной геймобжекты
- объект игры был инициализируется изображения, координаты х и у
следующий код будет затем проверить, был ли щелчок на прозрачной области:
var tempCanvas = document.createElement('canvas');
if (tempCanvas.getContext) {
tempContext = tempCanvas.getContext('2d');
}
tempContext.drawImage(gameObject.img, 0, 0);
var imgd = tempContext.getImageData(x - gameObject.x, y - gameObject.y, 1, 1);
var pix = imgd.data;
if (pix[3] == 0) {
// user clicked on transparent part of the image!
}
Примечание: Это, вероятно, довольно неэффективно. Я уверен, что кто-то может придумать лучшее решение.
меня решить эту проблему с помощью kintech.js, учебники и примеры можно найти: http://www.html5canvastutorials.com/kineticjs/html5-canvas-drag-and-drop-tutorial/
Вы также можете просто проверить координаты мыши против координат объекта. Чуть более интенсивный, но не очень сложный. –