どこかでメモリリークが発生しました。私は何度もそれを検索しました、そしてそれは私にはしっかりしているように見えます。私はただ..見つけることができません...それを見つける...わかりました、背景。これはスタック駆動のフラッドフィルであり、このコードのビットは、スタックに何かを追加する唯一の場所です。より多くのコードがあるので、誰もメモリリークを見つけることができない場合は、さらにいくつか投稿します。
これについて最も奇妙な部分があります。コードは1つの色+線画(pictexture)で正常に機能しますが、複数の色を使用して塗りつぶしバケットを使用すると、これらの奇妙なメモリリークが発生します。
//descend to the floor
while(true)
{
if(++iterator > total)
{
Debug.Log("broke in the stupid down loop...");
break;
}
//if we hit line art or a color we're not changing, break out of the loop
if(PicTexture.GetPixel((int)coords.x, (int)coords.y).a > .5f ||
MyTexture.GetPixel((int)coords.x, (int)coords.y) != ColorToChange || coords.y < 0)
{
break;
}
//if we're looking right and find an open spot in our texture
if(reach.right && MyTexture.GetPixel((int)coords.x + 1, (int)coords.y) == ColorToChange
&& PicTexture.GetPixel((int)coords.x + 1, (int)coords.y).a < .5f)
{
reach.right = false; //search it and stop looking right
if(!search.Contains(new Vector2((int)coords.x + 1, (int)coords.y)))
search.Push(new Vector2((int)coords.x + 1, (int)coords.y));
}
else
{
if(MyTexture.GetPixel((int)coords.x + 1, (int)coords.y) != ColorToChange
|| PicTexture.GetPixel((int)coords.x + 1, (int)coords.y).a >= .5f) //if theres a wall and we're not looking right
reach.right = true; //look for an opening to the rightq
}
//same thing for left
if(reach.left && MyTexture.GetPixel((int)coords.x - 1, (int)coords.y) == ColorToChange
&& PicTexture.GetPixel((int)coords.x - 1, (int)coords.y).a < .5f)
{
reach.left = false;
if(!search.Contains(new Vector2((int)coords.x - 1, (int)coords.y)))
search.Push(new Vector2((int)coords.x - 1, (int)coords.y));
}
else
{
if(MyTexture.GetPixel((int)coords.x - 1, (int)coords.y) != ColorToChange
|| PicTexture.GetPixel((int)coords.x - 1, (int)coords.y).a >= .5f)
reach.left = true;
}
MyTexture.SetPixel((int)coords.x, (int)coords.y, BrushColor);
coords.y--;
}
編集:私はちょうど私が最も奇妙な部分に言及するのを忘れたことに気づきました。このコードは、開始色(青)以外の色を使用するまでは問題なく機能します。色を変えたら、青に戻っても壊れてしまいます。