2016-08-17 89 views
1

我想從數組中刪除特定的項目在javascript中,但似乎無法得到[數組] .splice函數上班。
此代碼用於檢查SVG對象是否與另一個對象(對於遊戲)發生衝突。總會有3個對象與玩家相交,所以我希望從列表中移除這些對象。
到目前爲止我的代碼是:javascript [數組] .splice不工作(「未捕獲TypeError:collisions.splice不是函數」)

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>​] 

(直接複製)的一個例子。
但是,Google Chrome每次都會拋出一個錯誤「Uncaught TypeError:collisions.splice不是函數」,我不明白爲什麼(或者如何解決它)。

+0

您的衝突不是一個數組。檢查'typeof collisions.construcotr =='array''並查看它給出的結果 – Dellirium

+0

'getIntersectionList()'返回一個不是數組的節點列表。像'[... collisions] .splice()'一樣可以使它工作。 – Redu

+0

@Redu什麼樣的轉換是'[.. item]'你可以給一些鏈接/文檔,需要詳細看看! o.0 – Dellirium

回答

3

collisions的類型是Array

嘗試使用

Array.prototype.splice.call(collisions, i, 1)的不是。

什麼splice.call()看到這裏Function.prototype.call

+0

我現在遇到了「未捕獲的TypeError:無法在控制檯中分配爲只讀對象'#''的屬性「長度」 - 我可以設法在通過控制檯鍵入時運行它,但從腳本運行時似乎失敗。 –

+0

嘗試使用'slice'而不是'splice'並將新對象分配給另一個 –

相關問題