cocos2d と box2d、パドル、ボール、ブリックを使って目的の C で iPhone ゲームを作成しています。別の関数に半径方向の重力コードを追加しましたが、ここでおかしくなりました。コードは呼び出されず、メソッド内にあるだけで、まったく関係のないパドル コードが壊れます。
別のクラスに nslog を追加すると、さらに奇妙になります。x 上を移動しない状態から、y 上を移動せず、x を移動し始める状態に切り替わるからです。コードのランダムなビットをコメントアウトすると、動作または再ブレークが開始されます。box2d コードを移動して移動できますが、機能するかどうかはわかりません。すべてがランダムです。
誰がこれを引き起こす可能性があるか知っていますか? Objective-C に最大メソッド サイズはありますか? オーバーフローする可能性があります。このクラスの 1 つのメソッドは非常に大きいですか? アイデアはありますか?
ここにいくつかのコードがあります。ボックス本体が反転しただけの同じコードの場合、一致があります。このように、さまざまな物理体が相互作用するものは他にもたくさんあります。それらのいずれかの両方をコメントアウトすると、機能します。そうではないし、そうでもない
if (spriteA.tag == kSpritePowerUp && spriteB.tag == kSpritePaddle) {
if (std::find(toDestroy.begin(), toDestroy.end(), bodyB) == toDestroy.end()) {
PowerUp *tempPowerUp = (PowerUp*)bodyA->GetUserData();//spriteA;
Paddle* tempPaddle = (Paddle*)bodyB->GetUserData();//spriteB;
[tempPaddle addPowerUp:tempPowerUp];
[self playSoundEffect:kGameSoundPowerUp];
toDestroy.push_back(bodyA);
}
}
編集:解決しました。すべてのクラスを1行ずつすべて調べました。リークを実行し、2 を見つけました。
しかし、最終的には、false に自動初期化されるために依存していたユーティリティ関数の 2 つのローカル ブール値であることが判明しました。ほとんどの場合そうですが、そうでない場合もあります。特に理由はありません。月の満ち欠けとか。