2011-11-04 9 views
3

私のプレイグラウンドプロジェクトでSDLを使用しています。私は自分のPCパフォーマンスを少し心配しています - それは高すぎるか、私はただ放浪しています。SDL FPS入力遅延

キーボードのキーがダウンしたとき、たとえば2 pxでスプライトの座標を変更すると、スプライトの動きが速すぎます。そして同じことが1 pxの速度に有効です。

通常(SFMLで)私は次のベロシティの変更を行います:1.f/App->GetTimeSinceLastFrame()そしてそれはちょうど完全に機能します!しかし、今私はSDLを使いたいです。そして、次の理由により、異なるPCで同一ではない(確かに非常に醜い方法です)、または浮動小数点数の変換が行われないため、遅延を選択できません。

lastTicks = SDL_GetTicks()を実行してから1.f/(float) SDL_GetTicks() - lastTicks()を使用すると、その差は常にゼロです。だから私は間違っているか、または2つのフレーム間の時間がそれほど小さくて0に丸められています。

私は何をすべきですか?

注:変更SDLをXXXのためには良いアドバイスではありません。)

+0

'SDL_GetTicks'が高いため差分*がゼロ(そう意味で丸くなく蓄積し、たまに中の1つであるべき)殆ど*されるFPSので、唯一の解像度をミリ秒です。 'cur = get(); diff = cur-last; last = cur;'というように1つの呼び出ししか使わないようにしてください。より高い解像度のタイミング方法も役立ちます。 – jozxyqk

答えて

2

それは60以上のfps(モニタのリフレッシュレート)を行うには意味がありません。あなたはCPU時間を無駄にしています。ゲームが速すぎる場合はSDL_Delayに電話してください。

int delay=1000/maxFPS-SDL_GetTicks()+lastTicks; 

    if(delay>0) 
     SDL_Delay(delay); 
+2

この答えに追加するには:メインループの遅延後に入力/イベントをチェックするように注意してください。 v-syncは異なった動作をしますが、私は同様に特定の3Dアプリケーション、特にゲームで10-30msのマウスの動きの遅れで同様に不満を抱いています。 – jozxyqk

関連する問題