好吧,我承认我试图变得聪明:我想如果我覆盖 Shape 的 drawFunc 属性,我可以简单地在矩形内绘制任何内容,并且仍然使用 KineticJS 的点击检测。这是我的尝试:
var shape = new Kinetic.Shape({
drawFunc: function(context) {
var id = 26; // Id of a region inside composite image.
context.beginPath();
context.rect(0, 0, w, h);
context.closePath();
this.fill(context);
this.stroke(context);
context.drawImage(copyCanvas, (id % 8) * w, flr(id / 8) * h,
w, h, 0, 0, w / 2, h / 2);
},
draggable: true
});
因此,想法是绘制一个矩形,并使用 drawImage() 在矩形顶部绘制一些东西(就像纹理一样,除了它会不时更改,因为 copyCanvas 本身会发生变化)。与此同时,我希望事件处理(尤其是拖放)仍然“正常工作”。好吧,这就是发生的事情:我的 drawImage() 未覆盖的矩形部分正确检测到点击。但是,图像覆盖的矩形的四分之一拒绝响应点击!现在,我的问题是为什么?我深入研究了 KineticJS 代码,并认为点击检测只是意味着绘制到缓冲区并查看给定的 x、y 点是否具有非零 alpha。我看不出这会受到我在矩形顶部绘制图像的影响。
有什么想法吗?