GM ゲームのフレームレートと、フレームごとにゲーム コードが実行される頻度は? 私はそれを理解できるように説明されたどこにも答えを見つけることができません。これらを変更する方法はありますか?私は安定した 60 fps に慣れており、ゲーム コードはフレームごとに 1 回実行されます。私はフレーム タイミングでのプログラミングに慣れているため、これは重要です。つまり、1 フレームは使用できる時間の最小単位であり、カウンターはフレームごとに 1 回インクリメント (またはデクリメント) されます。これはまた、フレーム レートが低下すると、フレームがスキップされるのではなく、速度が低下することを意味します。私が別のプログラムでプログラミングしていたゲームのゲーム コードは、基本的にゲーム コードを 1 回実行してから、ゲーム コードを再度実行する前に VBlank が発生するのを待ちます。
3 に答える
GMの仕組みを説明しましょう。それは複雑です。
ゲームが開始されると、すべてのオブジェクトからゲーム開始イベントが呼び出されます。これは create イベントの後に発生すると思います。
(仮想) フレームごとに 1 回、step イベントが呼び出されます。ご覧のとおり、GM は自分自身を room_speed が何であれロックダウンするのではなく、できる限り速く実行します。(コンパイルされていない場合。) fps_real は、エンジンが特定の 1 秒間に実際にポンピングしている 1 秒あたりのフレーム数を示します。
したがって、プロセッサと GPU が room_speed に追いつくことができると仮定すると、room_speed の量のステップ イベントが毎秒発生します。たとえば、次の状況を考えてみましょう。
room_speed
は60ですfps
は60ですfps_real
は758ですObjPlayer
ステップ イベントがあるとします。
この場合、ObjPlayer
のステップ イベントはその 1 秒間に 60 回実行されます。
ただし、これは問題です。たとえば、キーボードのスペース ボタンを押したままにすると、プレーヤーは左に 3 ピクセル移動します。したがって、ゲームが全速力 ( room_speed
) で実行されていると仮定すると、プレーヤーは3 * 60
、この場合は 1 秒間に 180 ピクセル移動します。
ただし、CPU や GPU が 60 FPS に追いつかないとしましょう。30 で安定しているとしましょう。これは、プレイヤーが3 * 30
1 秒間に 1 秒または 90 ピクセルしか動かないことを意味し、ゲームが必要以上に遅く見えることを意味します。しかし、Hitman Absolution のような AAA ゲームをプレイしたことがある場合は、ゲームが 120 FPS と同じように 30 FPS で高速に見えることに気付くでしょう。どのように?デルタ時間。
デルタ時間を使用してroom_speed
、最大 (9999) に設定し、フレームあたりのピクセル速度を呼び出すたびに、60 FPS で動作するように調整されたデルタ時間を掛けます。私はそれをひどく説明していますが、私が理解するよりもはるかに簡単です. その方法については、GMC のこのガイドを参照してください。
デルタ タイムがある場合、FPS について (それほど) 心配する必要はありません。速度に関しては、何があっても同じように見えます。
しかし、リフレッシュ レートに関しては、100% 確信はありませんが、GM ゲームは 60hz であると信じています。間違っている可能性もありますが、それは私が聞いたことです。すべての GM ゲームも 32 ビットです。
部屋の設定で部屋の速度を変更できます。これは、1 秒あたりの歩数です。room_speed
このプロパティは、グローバルでゲーム中にアクセスして変更することもできます。
fps
読み取り専用グローバル で実際の画面更新速度にアクセスすることもできます。注:画面の fps は、各ステップの最後に発生するdraw イベントから完全に独立しています。
変数room_speed
とfps
は、探しているものかもしれません。fps
プログラムの実行中に変更することもroom_speed
、ルーム エディタを介して静的に変更することもでき、デフォルトでは 30 です。