javascript - 对 Canvas 中的图像进行像素精确的命中检测?

标签 javascript html canvas

我有一个基本的等距 map ,其中在 html Canvas 的 map 上加载了一些 Sprite 。

我想知道,是否可以单击 Canvas ,达到像素精确的水平,并让 JS 计算出您在 Canvas 中单击的内容?

如果是这样,是否还有一种无需库即可实现的方法?

最佳答案

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

现在,如果您的 Canvas 中已经有许多形状,并且想知道单击了哪一个,并且不想使用库,则必须维护表示这些形状的对象列表或 map ,并拥有一个 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 游戏开发来说是有用的库。

例如,使用 Crafty 的 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

关于javascript - 对 Canvas 中的图像进行像素精确的命中检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677808/

相关文章:

javascript - classList.add 有效,但切换不起作用

javascript - 如何将数字映射到数字?

html - 列表元素与其他元素的 float

javascript - 获取 context.fillRect() 方法的 X 坐标方法 - Javascript、Canvas

javascript - 单击缩略图时 iFrame 弹出窗口

javascript - 我的图片加载得太晚了,为什么?

html - 使用 CSS/Angular JS 固定列和标题

html - 如何将段落文本与中间的图像对齐

Javascript:隐藏 Canvas 对象的笔划

javascript - 顶级鼠标事件处理程序