ゲーム開発では、ゲームのスムーズで応答性を確保するために、正確な遅延制御が重要です。 PHPはスクリプト言語ですが、従来のゲーム開発言語ではありませんが、一部のミニゲームやサーバーベースのゲームロジックでよく使用されます。この記事では、PHPのTime_nanos Sleep機能を使用して、ゲームループの遅延制御をより正確に最適化する方法を紹介します。
Time_nanos Sleepは、プログラムが指定された秒およびNan秒時間の実行を一時停止できるようにするPHPによって提供される機能です。睡眠やUselepと比較して、 Time_nanos Sleepはより高い精密遅延制御をサポートします。これは、遅延要件が高いシナリオに適しています。
関数定義は次のとおりです。
bool time_nanosleep(int $seconds, int $nanoseconds)
$秒は、一時停止された非陰性整数の数秒数です。
$ nanosecondsは、0から999,99999の範囲で、一時停止したナノ秒数です。
呼び出しが成功した場合、関数はtrueを返し、それ以外の場合は偽りです。
ゲームループでは、通常、フレームあたり60フレーム(FPS)などの各フレームの間隔時間を正確に制御する必要があります。従来の睡眠(1)またはUSLoop(10000)機能の精度は限られています。特に、睡眠は第2レベルの遅延のみをサポートしますが、 USLeadはマイクロ秒のみをサポートしますが、システム環境によっては、マイクロ秒の精度は安定していません。 Time_nanos Sleepは、ナノ秒レベルの遅延をサポートします。これは、より厳しい時間間隔要件を持つアプリケーションにより適しています。
ターゲットが60 fpsであると仮定して、 time_nanosleepを使用して各フレーム間隔を制御していると仮定して、以下は次のとおりです。
<?php
$fps = 60;
$frameTimeSec = 1;
$frameTimeNano = (int)(1e9 / $fps); // 每帧ナノ秒数
while (true) {
$start = hrtime(true); // 現在の高精度時間を取得します,ナノ秒単位のユニット
// ゲームロジック処理
// ...
$end = hrtime(true);
$elapsed = $end - $start; // このフレームは時間を消費します(ナノ秒)
// 眠る時間を計算します
$sleepTime = $frameTimeNano - $elapsed;
if ($sleepTime > 0) {
// 拆分成秒和ナノ秒传入 time_nanosleep
$sec = intdiv($sleepTime, 1e9);
$nano = $sleepTime % (int)1e9;
time_nanosleep($sec, $nano);
}
}
?>
HRTIME(TRUE)を使用して、高精度の現在の時間であるユニットナノ秒を取得して、時差計算を容易にします。
たとえば、1秒/60 = 16,666,666ナノ秒など、フレームごとに消費する必要があるナノ秒数を計算します。
このフレーム$の論理実行時間を計算し、睡眠の残りの時間を計算します。
time_nanos Sleepを使用して、残りの時間を正確に一時停止して、各フレーム間隔がプリセット時間にできるだけ近いことを確認します。
Time_nanos Sleepは、システムのスケジューリングやその他のプロセスにより、睡眠時間が不完全である可能性があり、特定のエラーを容認する必要があります。
Time_nanos Sleepは、範囲を超える負の数やパラメーターをサポートしておらず、着信秒とナノ秒が合理的であることを確認する必要があります。
Windows環境では、ナノ秒の精度はLinuxやUnixのようなシステムほど良くない場合があり、影響は環境によって異なります。
より微調整されたコントロールが必要な場合は、 HRTIME()を組み合わせて動的調整を実現することもできます。
フレームレートを動的に調整します<BR> 現在のシステムロードに従ってゲームループのフレームレートを動的に調整して、エクスペリエンスをより安定させます。
セグメント化された遅延制御<br> Long DainesにTime_nanos Sleepを使用し、 Uselepなどと組み合わせて微調整を使用して、全体的な時間制御の精度を向上させます。
操作のブロックを避けてください<BR> ゲームロジックコードが効率的であることを確認し、過度の詰まりを避け、遅延制御への圧力を軽減します。
PHP公式文書: Time_nanos Sleep
高精度の時間獲得: HRTIME
上記の方法により、PHPプログラムは、より高い精度でゲームループの遅延を制御し、ゲームランニングの滑らかさと応答速度を向上させ、遅延に敏感なミニゲームまたはオンラインゲームのサーバーのニーズを満たすことができます。この記事が、PHPゲームループの時間制御を最適化するのに役立つことを願っています。