我正在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游戏。我到了可以再碰到一个泡泡的地步,它摧毁了它的所有邻居。现在,我正在尝试摧毁其所有邻居的邻居,并且......>
您的模式是正确的。我认为堆栈溢出异常是由返回到已经访问过的节点引起的。
您可能希望保留已访问过的节点的列表,然后不要将其作为邻居返回。您已经有了所需的东西,只需要组装就可以了。下面的代码可能对您有用