私は、6 つの銃を持つ宇宙船を持っている OpenGL ES アプリケーションに取り組んでいます。各銃は、キーフレーム アニメーションを使用して、開始位置と終了位置の 2 セットの頂点間を補間します。
rotateGun:
どの銃を発射するかを参照する gunNumber 変数を渡すメソッドがあります。発砲するrotateGun:
と、メソッドが呼び出されたときに砲身の位置で下向きのベクトルを介して船から遠ざかるレーザー爆風が作成されます。これはすべて正常に機能しますが、各銃が同時に発砲しているように見えるため、発砲する各銃にランダムな時間間隔を追加したいと考えています。
時間遅延を作成し、rotateGun: メソッドを使用して起動しようとしましたperformSelector:afterDelay:
が、これは機能しません。mainGunFire:
次に、遅延の後にメソッドを使用してから、メイン スレッドで呼び出しを試みましたが、rotateGun:
これも機能しませんでした。「機能しなかった」とは、メソッド内で描画呼び出しの直前に挿入した NSLogrotateGun:
が印刷されることを意味しますが、銃と爆発は描画されません。
単純に performSelectorOnMainThread を呼び出して を実行するとrotateGun:
、銃と爆風が以前のように描画され、爆風が同時に発砲しているように見えます。私は明らかに何かを理解していません。誰かが私のレーザーブラストを少しランダム化して、すべてが同時に発射されないようにする方法を理解するのを手伝ってもらえますか? ありがとう!
// Randomly Fire Gun
- (void)mainGunFire:(NSNumber *)gunNumber {
// Perform the Gun animation and fire on main thread
[self performSelectorOnMainThread:@selector(rotateGun:) withObject:gunNumber waitUntilDone:YES];
}
// Draw and Rotate the Guns
- (void)drawRotateGuns {
// Only shoot if this is not a ship life
if ( self.isLife == NO ) {
// Gun 1
// Set the pass variable to 1 and call the method
// after a variable amount of time
int randomTime = 0;
//[self performSelector:@selector(mainGunFire:) withObject:[NSNumber numberWithInt:1] afterDelay:randomTime];
[self performSelectorOnMainThread:@selector(rotateGun:) withObject:[NSNumber numberWithInt:1] waitUntilDone:YES];
// Gun 2 ...
// Gun 3 ...
}
}