簡體   English   中英

javascript [array] .splice無法正常工作(“未捕獲的TypeError:collisions.splice不是函數”)

[英]javascript [array].splice not working (“Uncaught TypeError: collisions.splice is not a function”)

我正在嘗試從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

根據https://developer.mozilla.org/en/docs/Web/API/SVGSVGElement ,結果getIntersectionList不是一個數組,但NodeList

但是,可以通過以下調用將NodeList轉換為Arrayvar div_array = Array.prototype.slice.call(div_list); // converts NodeList to Array var div_array = Array.prototype.slice.call(div_list); // converts NodeList to Array

此處的更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/API/NodeList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM