Unity:如何递归查找所有邻居(邻居的邻居?)>

问题描述 投票:2回答:1

我正在Unity中制作Bubble Shooter游戏。我到了可以再碰到一个泡泡的地步,它摧毁了它的所有邻居。

现在,我正在尝试销毁其所有邻居的邻居,这会导致堆栈溢出。我正在使用递归。

我没有递归地做到了,发现它的第二层邻居只是为了看逻辑是否可行。是的问题出在我使用递归的方式上。

    private List<Bubble> FindAllRecursiveNeighbors(Vector2Int originPosition)
{
    List<Bubble> allNeighbors = FindNeighbors(originPosition);

    List<Bubble> result = new List<Bubble>();

    foreach (Bubble bubble in allNeighbors)
    {
        if (result.Contains(bubble)) { continue; }
        result.Add(bubble);
    }

    // Recursion starts here.
    foreach (Bubble bubble in result)
    {
        List<Bubble> neighbors = FindAllRecursiveNeighbors(FindPositionOfBubble(bubble));
        foreach (Bubble neighbor in neighbors)
        {
            if (result.Contains(neighbor)) { continue; }
            result.Add(neighbor);
        }
    }

    return result;
}

我预计生产线上的所有气泡都会被破坏。我收到堆栈溢出错误。如果我删除递归部分,那么它会起作用,但仅适用于直接邻居。

错误是这样的:StackOverflowException:所请求的操作导致了堆栈溢出,并且在我再次调用FindAllRecursiveNeighbors的行中。

我正在Unity中制作Bubble Shooter游戏。我到了可以再碰到一个泡泡的地步,它摧毁了它的所有邻居。现在,我正在尝试摧毁其所有邻居的邻居,并且......>

c# unity3d recursion stack-overflow nearest-neighbor
1个回答
0
投票

您的模式是正确的。我认为堆栈溢出异常是由返回到已经访问过的节点引起的。

您可能希望保留已访问过的节点的列表,然后不要将其作为邻居返回。您已经有了所需的东西,只需要组装就可以了。下面的代码可能对您有用

© www.soinside.com 2019 - 2024. All rights reserved.