У меня есть учебник, который делает почти то, что вам нужно для тестирования хитов. Смотрите код здесь.
Когда вы нажимаете, код рисует каждую фигуру (я использую прямоугольники, но она прекрасно работает с полупрозрачными изображениями) на холсте в памяти (ghostcanvas) и проверяет, находится ли пиксель мыши на пикселе, который не прозрачный.
Соответствующий код вставлен ниже:
function myDown(e){
getMouse(e);
clear(gctx); // clear the ghost canvas from its last use
// run through all the boxes
var l = boxes.length;
for (var i = l-1; i >= 0; i--) {
// draw shape onto ghost context
drawshape(gctx, boxes[i], 'black');
// get image data at the mouse x,y pixel
var imageData = gctx.getImageData(mx, my, 1, 1);
var index = (mx + my * imageData.width) * 4;
// if the mouse pixel exists, select and break
if (imageData.data[3] > 0) {
mySel = boxes[i];
offsetx = mx - mySel.x;
offsety = my - mySel.y;
mySel.x = mx - offsetx;
mySel.y = my - offsety;
isDrag = true;
canvas.onmousemove = myMove;
invalidate();
clear(gctx);
return;
}
}
// havent returned means we have selected nothing
mySel = null;
// clear the ghost canvas for next time
clear(gctx);
// invalidate because we might need the selection border to disappear
invalidate();
}