1

相互引用我有一個二維數組,例如,這樣的:去除一個二維數組

[ 
    [0, 1], // collisionGroup0's references 
    [0, 1, 2], // collisionGroup1's references 
    [0, 1], // collisionGroup2's references 
]; 

這個數組定義了我的遊戲引擎的碰撞地圖。所以想象我有3個碰撞組。從這個數組中,我可以看出:

collisionGroup0與collisionGroup0和collisionGroup1發生衝突。

collisionGroup1與collisionGroup0,collisionGroup1和collisionGroup2發生碰撞。

collisionGroup2碰撞collisionGroup0和collisionGroup1。

我希望這是有道理的。

好了,這樣的問題:

我在尋找通過的方式來循環並刪除倒數引用。由於collisionGroup0與collisionGroup1碰撞並且collisionGroup1與collisionGroup0碰撞,因此我們只需要一個引用。否則,當我進行實際的碰撞檢查時,(我的引擎中發生了什麼)碰撞會加倍。

我想最終的陣列,處理後,看起來像這樣:

[ 
    [0, 1], // collisionGroup0's references 
    [2], // collisionGroup1's references 
    [0, 1], // collisionGroup2's references 
]; 

我現在看起來是這樣的:

for (var row : int = 0; row < array.length; ++row) 
{ 
    for (var column : int = 0; column < array[row].length; ++column) 
    { 
     for (var row2 : int = row + 1; row2 < array.length; ++row2) 
     { 
      for (var column2 : int = array[row2].length - 1; column2 >= 0; --column2) 
      { 
       if (array[row][column] == array[row2][column2]) 
        array[row2].splice(column2, 1); 
      } 
     } 
    } 
} 

但是,這給我留下了這一點:

[ 
    [0, 1], // collisionGroup0's references 
    [2], // collisionGroup1's references 
    [], // collisionGroup2's references 
]; 

因爲它沒有考慮到collisionGroup2與collisionGroup0不相交的事實。

任何想法我失蹤?

謝謝!

回答

3

擺脫碰撞目標指數大於當前指數的任何碰撞。所以,舉例來說,擺脫了**的傢伙低於

[ 
[0, **1**], // collisionGroup0's references 
[0, 1, **2**], // collisionGroup1's references 
[0, 1], // collisionGroup2's references 
]; 

因爲1> 0和2> 1 你可以做相反的事情 - 但如果是爲了,作爲例子,這種方式你最終會截斷數組,這可能比切斷它們的頭更快更容易。

我假設互惠參考是總是那裏。如果沒有,這是無用的!