2016-07-14 3 views
4

私はゲームを作ったが、ゲームが他のデバイスで同じように動作するかどうかはわかりません。たとえば、コンピュータのCPUが高い場合、プレイヤーと敵はより速く移動しますか? SFMLで利用可能なCPU使用量を定義する方法はありますか? 1 - キーが押されたかどうかを確認します 2 - もしそうなら:move(x、y);または、CPUに移動機能で何らかの操作をさせる方法があります。 ありがとうございました!SFMLゲームで使用するCPUの量を定義する方法は?

+2

[フレーム独立動作](https://www.google.com/search?ie=UTF-8&q=frame+independent+movement&gws_rd=cr&ei=N_6HV4OsF4myUYWgv9AF&fg=1)。私は[これ](http://lazyfoo.net/SDL_tutorials/lesson32/index.php)を読むことをお勧めしますが、それはSDLについてですが、何が起こっているのか理解します – PcAF

+0

リンクありがとうございます! – QApps

答えて

5

ゲームの物理がゲームのフレームレートの影響を受けることが心配されているようです。あなたの直感はあなたによく役立っています!これは重大な問題であり、あなたのゲームがプロフェッショナルであると感じるようにしたい場合に対処したいものです。彼のGaffer on Games記事'Fix Your Timestep!'

[不適切な時間を扱うゲームループを作ることができます]あなたの物理シミュレーションの行動のグレン・フィードラーによると

はあなたが合格デルタ時間の[依存]。効果はできますフレームレートに応じて少し違う「感触」を持つゲームとして微妙になるか、春のシミュレーションが無限に爆発するほど極端になることがあります。

ロジックは、フレームの描画にかかる時間から更新の依存関係を切り離す必要があると判断します。安全に(あなたのタイムステップ)

  • 時間を追加しますが、時間
  • プロセスの累積プール安全に渡された時に、すべてのフレームを渡す処理できる時間の量を選択

    • :簡単な解決策があるにチャンク
    • 擬似コードで

    time_pool = 0; 
    timestep = 0.01; //or whatever is safe for you! 
    old_time = get_current_time(); 
    
    while (!closed) { 
        new_time = get_current_time(); 
        time_pool += new_time - old_time; 
        old_time = new_time; 
    
        handle_input(); 
        while (time_pool > timestep) 
        { 
         consume_time(timestep); //update your gamestate 
         time_pool -= timestep; 
        } 
        //note: leftover time is not lost, and will be left in time_pool 
        render(); 
    } 
    

    この方法は持っていることは注目に値しますそれ自身の問題:consume_timeへの呼び出しによって生成された将来のフレームは、のフレームを消費する必要があります。 consume_timeへのコールに時間がかかりすぎると、次のフレームで2回、次に4回、次に8回などの処理が必要になることがあります。この方法を使用する場合は、consume_timeが非常に効率的であることを確認する必要があります。さらに、それでも緊急時対応計画を立てるのが最善です。

    さらに詳しい治療については、リンク先の記事を読むことをお勧めします。

  • 関連する問題