loop attraverso gli oggetti unità e determinare quale è stato fatto clic in questo modo:
// 'e' is the DOM event object
// 'c' is the canvas element
// 'units' is the array of unit objects
// (assuming each unit has x/y/width/height props)
var y = e.pageY,
x = e.pageX,
cOffset = $(c).offset(),
clickedUnit;
// Adjust x/y values so we get click position relative to canvas element
x = x - cOffset.top;
y = y - cOffset.left;
// Note, if the canvas element has borders/outlines/margins then you
// will need to take these into account too.
for (var i = -1, l = units.length, unit; ++i < l;) {
unit = units[i];
if (
y > unit.y && y < unit.y + unit.height &&
x > unit.x && x < unit.x + unit.width
) {
// Escape upon finding first matching unit
clickedUnit = unit;
break;
}
}
// Do something with `clickedUnit`
Nota, questo non gestirà gli oggetti che si intersecano complessi o problemi di z-index, ecc ... solo un punto di partenza davvero.
Immagino che potrei fare qualcosa del genere: if (elements.bound.left e.pageX) –
Travis
Si potrebbe prendere in considerazione l'uso di svg per gli oggetti e il canvas solo per lo sfondo e gli effetti. Potrai utilizzare qualcosa come $ (".projectile"). Live ("click", ..) gratuitamente, il browser gestirà il calcolo z-index e l'intersezione esatta stessa. – artificialidiot