私は現在、プレイヤーのためにダンジョンをランダムに生成するゲームに取り組んでいます。これは、さまざまなファイルから呼び出されるさまざまなメソッドのヒープ全体で構成されています。ドアの反対側にどれだけのスペースがあるかを計算できるようにコードが機能しているようです。
ただし、落とし穴があります。このコードは、CCLOG を使用してコンソールに出力している場合にのみ機能するようです。私はテストなしでかなりの量のコードを書き、コードがどのように機能するかを確認するために段階的に作業することにしました (バグなしで実行できるようにし、次に値を確認します)。
コードが各方向で利用可能なスペースを正常にチェックしていることを確認した後、チェックした場所を一覧表示した後、CCLOG 出力を削除することにしました。残念ながら、これを行うとコードが機能しなくなりました。
//First check "forward"
bottom = CGPointMake(startLocation.x + forwardDirectionModifier.x, startLocation.y + forwardDirectionModifier.y);
top = bottom;
do
{
currentLocation = CGPointMake(top.x + forwardDirectionModifier.x, top.y + forwardDirectionModifier.y);
tileType = [tileCache getTileType:currentLocation];
if (tileType == TileTypeFiller)
{
top = currentLocation;
CCLOG(@"Top location is %@", NSStringFromCGPoint(top));
}
} while (tileType == TileTypeFiller || top.y != 63);
これはコードの小さなスニペットです。これは、問題である可能性が最も高いと思われるコードのセクションです。基本的に問題は、行をコメントアウトまたは削除すると、CCLOG(@"Top location is %@", NSStringFromCGPoint(top));
機能しなくなることです。
詳細は次のとおりです。
- このようなコードの小さなチャンクがいくつかありますが、それぞれに CCLOG を実行している限り、次のコードに移動できます。それらのいずれかをコメントアウトすると、次のチャンクへの進行が停止します。
- CCLOGを変更して何でも出力できますが、それでも機能します。そこにある必要があります。
- プロジェクトのクリーニングを試みました。
- ループ内で使用されていない CCLOG がさらにあり、それらは問題なく削除できます。
誰にもこれに対する解決策がありますか?私が知る限り、何かをコンソールに出力するかどうかに関係なく、コードが実行されるかどうかに影響を与えるべきではありません。
前もって感謝します。
編集: Ben Trengrove の提案で、CCLOG が使用されている場所の例をさらに追加しています。
このコードは、前述のコードの直後に続きます。
//Check left relative to door
farLeft = CGPointMake(startLocation.x + leftDirectionModifier.x, startLocation.y + leftDirectionModifier.y);
do
{
currentLocation = CGPointMake(farLeft.x + leftDirectionModifier.x, farLeft.y + leftDirectionModifier.y);
tileType = [tileCache getTileType:currentLocation];
if (tileType == TileTypeFiller)
{
farLeft = currentLocation;
CCLOG(@"Far Left location is %@", NSStringFromCGPoint(farLeft));
}
} while (tileType == TileTypeFiller || farLeft.x !=0);
//Check forwards from far left
top2 = farLeft;
do
{
currentLocation = CGPointMake(top2.x + forwardDirectionModifier.x, top2.y + forwardDirectionModifier.y);
tileType = [tileCache getTileType:currentLocation];
if (tileType == TileTypeFiller)
{
top2 = currentLocation;
CCLOG(@"Top2 location is %@", NSStringFromCGPoint(top2));
}
} while ((tileType == TileTypeFiller)|| (top2.y != 63));