ゲームは 1 つのコアで可能な限り高速に実行されます。これは、あなたがしたことによっては正常です。
より多くの電力を消費したい (したがって 100% に到達する) か、電力を少なくしたい (そして、貧しいユーザーのエネルギー料金を節約したい...) かはわかりません。
より多くの電力を必要とする場合は、何らかの方法でスレッド化を使用して、両方のコアを使用する必要があります。私はスレッディングにはあまり興味がないので、説明しようともしませんが、それはまったく私の分野ではありません。
LESS電力を使用したい場合は、2つのオプションもあります...
1 つは "yield" で、一部のゲーム ライブラリ API は (Allegro など) と呼んでいます。これは、FPS カウンターを作成し、十分な時間フレームごとに CPU に制御を戻すことで構成されます。たとえば、ゲームを 120 FPS で実行したい場合、60 で実行したい場合、フレームの計算にかかる時間とほぼ同じ時間 (約 8,3333... ms) を彼に与えることができます。
もう 1 つは、ループの代わりに、イベント ベースの方法でゲームをコーディングすることです。その形式では、コードを「Update」という名前の関数内に配置します。この関数は、最後の呼び出しからかかった時間を引数として受け入れます (これは非常に重要です...)。この「更新」は、アプリ全体 (より古典的)、または独自の各オブジェクト (「OnEnterFrame」としてこれを使用する Flash の発明後に人気があり、Unity もこれを使用し、他のエンジン) のいずれかです。そして、割り込みをスローしてその Update を呼び出すコードを作成します。通常は、定期的に実行されるタイマーです (60FPS の場合は 16.6.... ms、30FPS の場合は 33.33333... ms)。
明らかに、他にもたくさんの方法がありますが、小さな本には十分な情報なので、すべてを説明することはしません...
私は自分自身でさまざまなアプローチを使用してきましたが、CPU をフル ブラスト (スレッド化せずに) 使用するのが好きで、電源が利用可能になるにつれて、システムを悪用する効果をますます使用します。しかし、より単純なゲームでは、通常、すべてを計算するのにかかった時間をカウントする最も簡単な方法である「生成」するループを作成し、16.6 ミリ秒からそれを引き、スリープ関数 (その時間の OS に制御を与える) を呼び出します。結果... 同様に、フレームの計算に 3 ミリ秒かかった場合、sleep(16-3) を呼び出します。そして、いくつかのエンジンは「イベントスタイル」で作業することを強制します (つまり、入力はキーボード、マウス、およびジョイスティックの割り込みから来て、タイマーが割り込みをかけて「Update(step)」を呼び出します)、私はそれが嫌いですが、学ぶ必要がありました。 ..
最後に、「step」変数 (Update 引数) は、通常、ゲーム ロジックの数学で使用されます。一定速度... (明らかに、使用される操作は、「ステップ」が表すものによって異なります)。