我正在尝试从javascript中的数组中删除特定项,但似乎无法使[array] .splice函数正常工作。
此代码用于检查SVG对象是否已与另一个对象碰撞(对于游戏)。总是有3个对象与玩家相交,因此我希望将其从列表中删除。
到目前为止,我的代码是:

svg=document.getElementById("canvas");

function checkcollision(){
    var r0=document.getElementById("rhb1").getBoundingClientRect(), r1=svg.createSVGRect(); r1.x=r0.left; r1.y=r0.top; r1.width=r0.width; r1.height=r0.height;
    var collisions=svg.getIntersectionList(r1,null), len=collisions.length;
    console.log(collisions);
    for(i=len-1;i>=0;i--){
        if(collisions[i].id=="renclosure"||collisions[i].id=="cplayer"||collisions[i].id=="rhb1"){
            collisions.splice(i,1);
        }
    }
    console.log(collisions);
    if(collisions.length>0){
        return true;
    }
    else{
        return false;
    }
}


控制台为冲突数组显示的示例是

[<rect id=​"renclosure" x=​"0" y=​"0" width=​"15360" height=​"8640" class=​"st0">​</rect>​, <circle id=​"cplayer" cx=​"960" cy=​"540" r=​"50" class=​"st1">​</circle>​, <rect id=​"rhb1" x=​"0" y=​"0" width=​"100" height=​"100" class=​"st2" transform=​"translate(910, 490)​ rotate(0 050 050)​">​</rect>​]


(直接复制)。
但是,谷歌浏览器每次都会引发错误“未捕获的TypeError:collisions.splice不是函数”,我也不知道为什么(或如何修复)。

最佳答案

您的collisions不是Array类型

尝试使用

Array.prototype.splice.call(collisions, i, 1)

那么splice.call()怎么看这里Function.prototype.call

关于javascript - javascript [array] .splice无法正常工作(“未捕获的TypeError:collisions.splice不是函数”),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38994015/

10-11 14:21