Javascript 画布中图像的像素精确命中检测?

Javascript 画布中图像的像素精确命中检测?,javascript,html,canvas,Javascript,Html,Canvas,我有一个基本的等轴测地图,一些精灵加载在html画布的地图上 我想知道,有没有可能点击画布,达到像素级,让JS计算出你在画布上点击了什么 如果是这样的话,还有没有一种方法可以在没有库的情况下执行此操作?画布API有一种方法,它允许您确定点(x,y)是否在当前路径内(或其上) 现在,如果您的画布中已经有许多形状,并且希望知道单击了哪一个,并且不想使用库,那么您必须维护表示这些形状的对象的列表或映射,并拥有一个onclick事件处理程序,该处理程序可以对其进行迭代并执行一些计算 这样的清单可能看起来

我有一个基本的等轴测地图,一些精灵加载在html画布的地图上

我想知道,有没有可能点击画布,达到像素级,让JS计算出你在画布上点击了什么

如果是这样的话,还有没有一种方法可以在没有库的情况下执行此操作?

画布API有一种方法,它允许您确定点(x,y)是否在当前路径内(或其上)

现在,如果您的画布中已经有许多形状,并且希望知道单击了哪一个,并且不想使用库,那么您必须维护表示这些形状的对象的列表或映射,并拥有一个
onclick
事件处理程序,该处理程序可以对其进行迭代并执行一些计算

这样的清单可能看起来像

var shapeList = [
    {shape: "rect",   x0: 100, y0: 100, x1: 200, y1: 150},
    {shape: "circle", x0: 400, y0: 400, r: 50},
    ...
];
幸运的是,有一些图书馆可以为您完成这项工作。例如,您可以检查或。这些是画布游戏开发的有用库

例如,使用Crafty的方法:

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

现在,如果您的画布中已经有许多形状,并且希望知道单击了哪一个,并且不想使用库,那么您必须维护表示这些形状的对象的列表或映射,并拥有一个
onclick
事件处理程序,该处理程序可以对其进行迭代并执行一些计算

这样的清单可能看起来像

var shapeList = [
    {shape: "rect",   x0: 100, y0: 100, x1: 200, y1: 150},
    {shape: "circle", x0: 400, y0: 400, r: 50},
    ...
];
幸运的是,有一些图书馆可以为您完成这项工作。例如,您可以检查或。这些是画布游戏开发的有用库

例如,使用Crafty的方法:


有趣的问题。然而,也许你们应该把它贴在gamedev.stackexchange.com上:)我几乎从来并没有在那个里得到回复:一个令人担忧的问题。然而,也许你应该把它发布在gamedev.stackexchange.com上:)我几乎从来没有收到过回复:你能解释一下你发布的第二段代码吗。。就正在做什么而言?如果我有20多张图像要检查,我必须对所有图像进行检查才能得到正确或错误:S?@Dave第二个片段只是创建了一个圆心位于(0,0),半径为10px的圆。然后,它检查圆是否包含点(0, 0)(它是真的)和点(50, 50),(它是假的)。@戴夫,如果你有许多固定的形状,你可以考虑使用一个映射,其中每个键代表画布的一个像素,每个值包含这个像素的形状。这样的地图可能相当大,因此如果许多像素与任何形状都没有关联,那么最好不要将它们包含在地图中。然后,一次查找就会告诉您给定像素属于哪个形状(如果有的话)。。就正在做什么而言?如果我有20多张图像要检查,我必须对所有图像进行检查才能得到正确或错误:S?@Dave第二个片段只是创建了一个圆心位于(0,0),半径为10px的圆。然后,它检查圆是否包含点(0, 0)(它是真的)和点(50, 50),(它是假的)。@戴夫,如果你有许多固定的形状,你可以考虑使用一个映射,其中每个键代表画布的一个像素,每个值包含这个像素的形状。这样的地图可能相当大,因此如果许多像素与任何形状都没有关联,那么最好不要将它们包含在地图中。然后,一次查找将告诉您给定像素属于哪个形状(如果有的话)。