[已解决] 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的那一行中。

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

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

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