【发布时间】:2011-10-19 13:53:48
【问题描述】:
我有一个二维数组,例如:
[
[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 不互易的事实。
任何想法我错过了什么?
谢谢!
【问题讨论】:
标签: arrays algorithm language-agnostic multidimensional-array