NSTimer
リアルタイムタイマーではありません。それは近くにさえありませんし、そうであることを意味するものでもありません。約 0.5 秒よりも速いものを見ている場合NSTimer
は、間違ったツールです。1秒未満のものにはお勧めしません。数秒のもの、特に数分のものの場合、正確にいつ起動するかをあまり気にしない場合、それは素晴らしいことです. いつも使っています。
CACurrentMediaTime()
タイマーではありません。これは、システムで最も正確な時間関数のラッパーです: mach_absolute_time()
. したがって、今何時かを本当に気にし、それを人間が理解できる数字にしたい場合は、それCACurrentMediaTime()
があなたの機能です。非常に正確な数値が得られますが、これはマッハmach_absolute_time()
の絶対時間単位に基づいており、実際には人間が考える厄介なものにはマップされません (すべての CPU は異なるスケールを持っています)。だからこそ、私たちは生活を楽にしなければなりません。CACurrentMediaTime()
わかりました。NSTimer
リアルタイムでCACurrentMediaTime()
はなく、タイマーでもありません。ゲームプログラマーは何をするのですか?
Grand Central Dispatchには、私たちが持っている最高の「この時点で実行する」システムの 1 つが含まれています。発送元です。私が「この頃」と言ったのは、GCD はまだ RTOS 関係者が意味する「リアルタイム」ではないからです。しかし、ゲーム開発者にとっては十分なリアルタイム性です。Concurrency Programming Guideで「Creating a Timer」を探してください。も参照してくださいdispatch_after()
。これは、「後でこれを実行する」というワンショットに適しています。
メイン スレッド (すべての描画が行われる UI スレッド) で実行されるものはすべて、そのスレッド上の他のすべてのものと時間を共有することに注意してください。そのため、メイン スレッドで描画やユーザー操作を処理している間に、バックグラウンド スレッドで計算を行う必要が生じることがよくあります。これは、GCD dispatch_queues が支援するように設計されている種類のものです。一方、多くの iOS デバイスはシングルコアであることを思い出してください。したがって、「バックグラウンド スレッド」は少し誤称です。CPU で実際に一度に実行できるのは 1 つだけです。そのため、物事を GPU に移行することが非常に重要です (以下を参照)。
また、非常に優れたゲーム エンジンであるcocos2dなどのシステムを真剣に検討することもできます。この種の詳細の多くを処理し、ゲームの部分に集中できるようにします.
Apple フレームワークにとどまり、Core Animation も検討する必要があります。タイマーを使用して画面上で物事を動かしている場合は、そうすべきではありません。コア アニメーションは、画面上で物を動かす方法です。多くの詳細をあなたに代わって処理し、自分で行うよりも高速でバッテリーの消費を抑え、多くの作業を GPU に移します (前述のとおり)。ゲームというよりも UI 要素向けに設計されていますが、単純なゲームを構築するために使用することは間違いありません。
もちろん GLKit もありますが、それはまったく別のものです....