0

NSTimerを使用して、特定の時間間隔の後に画像を移動するアニメーションゲームアプリを作成しました。

timer = [NSTimer scheduledTimerWithTImerInterval:0.2 target:self selector:@selector(MoveVirus) userinfo:nil repeats:YES];

このタイマーは関数MoveVirusを呼び出し、MoverVirusはウイルス(画面上の画像)を移動します。

最初は問題なく動作しますが、モーションの速度は自動的に増加します。モーションの速度が上がると、それ以降のすべてのロジックが破壊されます。

何が問題なのかわかりませんか?

この問題の解決にご協力ください。

4

1 に答える 1

2

NSTimerは、必ずしもこの種の使用を目的としたものではありません... NSTimerのドキュメントから:

タイマーはリアルタイムのメカニズムではありません。タイマーが追加された実行ループモードの1つが実行中であり、タイマーの起動時間が経過したかどうかを確認できる場合にのみ起動します。一般的な実行ループが管理するさまざまな入力ソースのため、タイマーの時間間隔の有効な解決は50〜100ミリ秒のオーダーに制限されます。実行ループがタイマーを監視していないモードにあるとき、または長いコールアウト中にタイマーの起動時間が発生した場合、実行ループが次にタイマーをチェックするまで、タイマーは起動しません。したがって、タイマーが実際に起動する時間は、スケジュールされた起動時間の後、かなりの期間になる可能性があります。

UIImageViewに含まれるUIImageを移動する場合は、UIViewでクラスアニメーションメソッドを使用することをお勧めします。遅延を含むアニメーションメソッドを使用すると、特定の時間後に画像を移動した場合でも同じ結果を得ることができます。方法は次のとおりです。

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

この方法を使用すると、アニメーションの時間(UIImageの移動をアニメーション化するのにかかる時間)、このアニメーションを開始するまでの待機時間、アニメーションオプションのセット、アニメーションコードのブロック、およびブロックを指定できます。アニメーションが完了すると実行されます。

于 2012-04-06T16:43:32.387 に答える