2016-09-03 6 views
0

私のプログラムのdeltaTimeを使用することをお勧めしたいと思います(プログラムが実行されている現在の時間とプログラムが最後の反復以降に実行された時間の間のミリ秒単位の変化)カメループ)を使って敵の健康損失をコントロールします。デルタタイムで健康損失をコントロールする必要がありますか? C++/SDL2

ので、代わりのこのやって:

... 
enemy.setHealth(enemy.getHealth() - 5); 
... 

を私はこれを行う:

... 
enemy.setHealth(enemy.getHealth() - (5 * deltaTime)); 
... 

アイデアは、他のコンピュータ上の類似した時に健康な減少を作ることですが、これは必要なのか?

ありがとうございます。

+0

キャッピングfpsesはより良いソリューションかもしれません。 – Ven

+0

SDL_Delay()を使用してプログラムを遅らせるのと同じように、キャッピングを意味しますか? – NJSADFNSDFNSFDN

+0

上限は高くなりますが、それ以下ではありません(例えば、フレーム内で非常に多くのことが起こり、ターゲットのマシンがキャップフレームレートでそれをレンダリングできず、ロジックが遅くなりますが、そのような振る舞いをしていますが、固定(つまり、フレームレートに関係なく一定の時間間隔で計算を実行する)と、実際に渡された時間(あなたの 'deltaTime')を掛けることの2つの解決方法があります。いくつかの点では、1つの解決策がより良いかもしれません(例えば、物理がほぼ常に固定ステップで計算されます)が、与えられたタスクでは明確な勝者はありません。もっと好きなものを選んでください。 – keltar

答えて

1

ゲームの適切な動作を決定する必要があります。健康損失のスケーリングファクタとしてdeltaTimeを使用する場合は、1)浮動小数点のヘルスを使用する必要があります.2)CPUの問題がある場合は、すべての敵が1つのフレームで死んでしまう可能性があります。

フレームレートを抑制し、一定の時間ステップを想定すると、シミュレーションを少しだけ制御することができます。一部のテストハードウェアが目的のFPSに当たっていない場合は、時間的精度を失うリスクでタイムステップを増やすことを検討できます。

関連する問題