2016-07-07 30 views
0

私が作っているゲームのすべてのフレームを入力するには、GetAsyncKeyState()を使用しています。キーを押す間に遅延を追加する

xは、すべてのフレームではなく、1つずつ移動する必要がありますが、遅延が必要です。私は現在、キーを押すたびにクールダウンすることでこれをやっています。

がここに私のCoolDownクラスの一部されています

bool test(bool asumedStatus) 
{ 
    if(asumedStatus == status) 
    { 
     return true; 
    } else 
    { 
     return false; 
    } 
} 

void go() 
{ 
    if(currentCount == runFor) 
    { 
     status = OFF_COOLDOWN; 
    } else 
    { 
     currentCount++; 
    } 
} 

void start() 
{ 
    currentCount = 0; 
    status = ON_COOLDOWN; 
} 

controlsは、ユーザ入力残念ながら

void controls() 
{ 
    if(test(OFF_COOLDOWN)) 
    { 
     if(KEY_L && !KEY_R && !KEY_U && !KEY_D) 
     { 
      left(); 
      print(); 
      cd.start(); 
     } 
     else if(KEY_R && !KEY_L && !KEY_D && !KEY_U) 
     { 
      right(); 
      print(); 
      cd.start(); 
     } else if(KEY_U && !KEY_L && !KEY_D && !KEY_R) 
     { 
      up(); 
      print(); 
      cd.start(); 
     } else if(KEY_D && !KEY_L && !KEY_R && !KEY_U) 
     { 
      down(); 
      print(); 
      cd.start(); 
     } 
    } else 
    { 
     cd.go(); 
    } 
} 

を取得するために、すべてのフレーム呼び出され、これが動作しない、遅延がありません。何も変わっていません。

誰かが私がこれをどのように達成できるか考えていますか?

+0

あなたは 'runFor'本当に大きな数を与えることをしようとしましたか?シンプルなゲームでは、数百万フレームのグラフィックスを使わなくても、毎秒何千ものフレームとゲームを実行できます。また、より良いアイデアはRakete1111が提案したように時間を使うことです。 BTW。 'test()'が 'cd.test()'でないのはなぜですか? – Logman

答えて

1

は、ここで私はそれを行うだろう方法は次のとおりです。


私はフレーム、またはゲームのダニを示すために時間を使います。私は2つの変数になるだろう

: - 時間の遅延が

  • currentTimeを開始したポイント -

    • startTime現在時刻現在

    を、あらゆるダニ、私はによって(currentTimeを更新します1)。

    これらの変数の差をとることで、遅延の開始からの経過時間が得られます。

    差がより大きい場合よりdelayより大きい場合は、すべてをもう一度開始するために変数をリセットする必要があります。したがって、startTimecurrentTimeに設定し、currentTime0に設定してください。

    より小さく、delayより小さい場合は、遅延が「完了」していないため、何もしないでください。

    のような何か:

    startTime = 0; 
    currentTime = 0; 
    delay = 2000; //In frames/ticks 
    
    //Called every frame/tick 
    void update() { 
        ++currentTime; //Update time 
    
        if (currentTime - startTime > delay) { 
         //Reset 
         startTime = currentTime; 
         currentTime = 0; 
    
         //Update whatever requires a delay 
        } 
    } 
    
  • 関連する問題