我创建了自己的addEventListener来处理画布上的对象,但是我在创建自己的removeEventListener函数时遇到了麻烦。
在我的形状构造函数中,我有这段代码:
this.addEventListener = function(method, func)
{
if (method == "mouseDown")
{
scene.mouseDownShapes.push({shape:this, func:func})
}
}
this.removeEventListener = function(method, func)
{
if (method == "mouseDown")
{
scene.mouseDownShapes.splice(scene.mouseDownShapes.indexOf({shape:this, func:func}), 1);
}
}
在我的鼠标按下处理程序中,我运行了scene.mouseDownShapes并检查它们是否与鼠标发生碰撞。如果他们这样做,那么我打电话给func。这里的问题是," scene.mouseDownShapes.indexOf(...)"返回-1,所以它不起作用。如何在数组中找到原始对象的索引?
答案 0 :(得分:1)
与.indexOf()
的对象相等仅适用于同一物理对象(它不适用于具有相同属性的其他对象)。
由于您没有引用放入数组中的同一物理对象,因此您可以在数组中搜索具有属性shape: this
的对象。这涉及遍历数组以找到它。
this.removeEventListener = function(method, func) {
if (method == "mouseDown"){
for (var i = 0; i < scene.mouseDownShapes.length) {
if (scene.mouseDownShapes[i].shape === this) {
scene.mouseDownShapes.splice(i, 1);
break;
}
}
}
}