我正在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的那一行中。
您的模式是正确的。我认为堆栈溢出异常是由返回到已经访问过的节点引起的。