2012-03-13 62 views
0

我有一个基本的等轴测图,一些精灵在html画布中加载到地图上。画布上图像的像素准确命中检测?

我想知道,是否有可能点击画布,像素准确的水平,并让JS找出你在画布上点击了什么?

如果有,还有一种方法可以在没有图书馆的情况下完成吗?

+0

Intereresting问题。然而,也许你应该把它公布在gamedev.stackexchange.com上:) – Luc125 2012-03-13 12:39:34

+0

我几乎从来没有得到过回应:P – Sir 2012-03-13 21:37:22

回答

3

Canvas API有isPointInPath(x, y)方法,它允许您确定点(x,y)是否在当前路径(或其上)内。

现在,如果您的画布上已经有很多形状,并且想知道哪个被点击过,并且不想使用库,那么您将不得不维护代表这些形状的对象的列表或地图,并且有一个onclick事件处理程序遍历它并执行一些计算。

这样一份名单,可能看起来像

var shapeList = [ 
    {shape: "rect", x0: 100, y0: 100, x1: 200, y1: 150}, 
    {shape: "circle", x0: 400, y0: 400, r: 50}, 
    ... 
]; 

幸运的是,有图书馆,有可以为你做这项工作。您可以检查例如crafty.jslime.js。这些是Canvas游戏开发的有用库。

对于为例,使用狡猾的containsPoint(x, y)方法:

var circle = new Crafty.circle(0, 0, 10); 
console.log(circle.containsPoint(0, 0)); // true 
console.log(circle.containsPoint(50, 50)); // false 
+0

你能解释一下你发布的第二个代码片段。 – Sir 2012-03-13 21:35:28

+0

如果我有20 +图片检查,我将不得不做一个检查,他们都得到真或假:S? – Sir 2012-03-14 04:10:49

+0

@Dave第二个片段只是创建一个中心位于(0,0)且半径为10px的圆。然后它检查圆圈是否包含点(0,0)(它是真的)和点(50,50)(它是假的)。 – Luc125 2012-03-15 13:39:57