gpt4 book ai didi

arrays - 从二维数组中删除相互引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:00 25 4
gpt4 key购买 nike

我有一个二维数组,例如:

[
[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 不互惠这一事实。

知道我遗漏了什么吗?

谢谢!

最佳答案

摆脱任何碰撞目标索引大于当前索引的碰撞。因此,例如,摆脱下面的 ** 家伙

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

因为 1 > 0 和 2 > 1。您可以做相反的事情 - 但如果它们是有序的,如示例中所示,这样您最终会截断数组,这可能比切掉它们的头部更快更容易。

我假设相互引用总是在那里。如果没有,这是没有用的!

关于arrays - 从二维数组中删除相互引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6934906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com