如何強制遞歸函數在運行時產生幀?如何強制遞歸函數生成跳過幀?
我試圖把屈服函數的遞歸函數的不同階段。
我不明白髮生了什麼,因爲如果條件印刷品時,每1000個遞歸被忽略,它只是產量和打印大約每100萬個遞歸。應該被拾取的打印命令的90%被代碼忽略並且不出現。 運行時每隔1-2分鐘產生一次,並一次打印十幾條語句。
這是我已成功地編寫代碼的最快的版本;如果我向上或向下更改yield單詞,運行時有時會完全凍結,10分鐘內沒有任何反應。
爲什麼它凍結,我該如何改變呢?
//A working 3D floodfill function that reads and writes a boolean voxel array:
private var maxAbort = 1000000000;
function boundary(x:int, y:int, z:int): IEnumerator //floodfill algo
{
if (read3DboolArray(x,y,z)==false && bcnt<maxAbort){//pprevent stackoverflow with limit FASTER
if (x >= 0 && x < bsizex && y >= 0 && y < bsizey && z >= 0 && z < bsizez)
{
write3DboolArray(x,y,z,true);
boundary(x+1,y,z);
boundary(x-1,y,z); yield WaitForFixedUpdate();
boundary(x,y+1,z);
boundary(x,y-1,z); // yield WaitForFixedUpdate();
boundary(x,y,z+1);
boundary(x,y,z-1);
}
if (bcnt % 1000== 0)//mark new start if ended this recursion run
{
print(bcnt+ " ------ " +
(Time.realtimeSinceStartup-tt));
bcnt+=1;
yield WaitForFixedUpdate();
}
} else return;
}
它使用Unity3D的MonoDevelop中運行時它是.NET框架2.0
我用一種比通用堆棧更好的方法解決了這個問題,這裏的結果是https://unity3dmc.blogspot.fr/2017/02/ultimate-3d-floodfill-scanline.html –