2010-12-11 16 views
1

実行速度を低下させる方法があるかどうかを知ることはできません(呼び出し間の更新と描画時間)。XNAの実行速度を下げる

私は通話が遅すぎるため、通話のスピードを遅くする必要があります。その結果、表示時間が非常に短いため、実際には何も見えません。

目的は、私のアプリケーションのロジックを表現するものの進展をよりゆっくりと示しています。

タイトルが明確でない場合は、XNA Game Frameworkを参照してください。

+0

? –

+1

これが何を意味するのか説明できますか?*私のアプリケーションのロジックを表現するものの進行をよりゆっくりと表示したい* –

+1

最初に更新/描画が呼び出される速度に頼るべきではなく、一定の速度で呼び出される。 – Doggett

答えて

4

私はその更新をお使いのUpdateメソッドの内部でいくつかのコードを持っているあなたをお勧めしますx秒ごとにあなたのゲームのロジック。

を定義します。あなたがプログラム全体を遅くするために持っていけない、このアプローチでは

timeSinceLastUpdate += gameTime.ElapsedGameTime.TotalMilliseconds; 
if(timeSinceLastUpdate >= millisecondsPerFrame) 
{ 
    timeSinceLastUpdate = 0; 

    //YOUR GAMES LOGIC GOES HERE 
} 

int millisecondsPerFrame = 1000 //Update every 1 second 
int timeSinceLastUpdate = 0 //Accumulate the elapsed time 

今、あなたのアップデートであなたのようなものを持つことができます。

+0

:)私はあなたのソリューションが好きです、私よりも自然です。 – mjsr

1

MSDNでその答えが見つかりました。キーがTrueに設定されているIsFixedTimeStep次に変数TargetElapsedTimeを増減します

最初に、プロパティIsFixedTimeStepをtrueに設定する必要があります。次に、変数TargetElapsedTime(Updateの呼び出し時のレート)で再生できます/ 60秒で表示するには速すぎるので、私は1/2秒で設定し、実行時にこの値を変更するために2つのキーを追加します。

IsFixedTimeStep = true; 
TargetElapsedTime = TimeSpan.FromSeconds(0.5); 

そして、私はスピードアップと更新が呼び出しを遅くするTargetElapsedTimeでプレイできる更新方法で:

if ((Keyboard.GetState().IsKeyDown(Keys.W))) 
{ 
    TargetElapsedTime += TimeSpan.FromSeconds(0.1f); 
} 
if ((Keyboard.GetState().IsKeyDown(Keys.S))) 
{ 
    if ((TargetElapsedTime - TimeSpan.FromSeconds(0.1f))>TimeSpan.Zero) 
    { 
     TargetElapsedTime -= TimeSpan.FromSeconds(0.1f);  
    } 

} 
0

私はここでのいくつかの答えに同意します。あなたは本当にゲームの実行を遅くしたくはありません。これを行うには少しの注意点があります。あなたがその一定の時間に立ち往生しているときに、トラックを後でデザインすることは難しくなります。

タイムデルタを使用する際の問題は、更新メソッドの呼び出し頻度を決して確認できないことです。これには、実行速度が速すぎたり低すぎたりする要因がいくつかあります。あなたのゲームループが少しでも遅い場合、あなたはゲームの一歩を逃すことができます。スポーツゲームのようなものの場合、これは悪くなるでしょう。

代わりにタイマーを使用してください。 .NETには、驚くべきイベントモデルと事前に構築されたタイマークラスがあります。初期化され、ループする頻度を指定します。各ループはあなたが聞くことができるイベントを発します。これの利点は2倍です。まず、ティックがあなたの近くに、またはあなたがそれに尋ねるときに発砲することが保証されます。第2に、メインゲームロジックでは動作せず、プログラムをより良い方法で構造化することができます。複数のイベントをタイマーにバインドすることもできます。これにより、コードをモジュール化することができます。

これを試してみてください

...あなたがダウンしてゲームを遅くしたい

//create a new instance of a timer 
//and set it to 1000 millisecond interval(1 second) 
Timer t = new Timer(1000); 

//Add a listener to the elapsed event 
t.Elapsed += new ElapsedEventHandler(t_Elapsed); 

//start the timer 
t.Start(); 

void t_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    // I am called each second 
} 
関連する問題