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 你可以做相反的事情 - 但如果是为了,作为例子,这种方式你最终会截断数组,这可能比切断它们的头更快更容易。

我假设互惠参考是总是那里。如果没有,这是无用的!