2016-05-08 7 views
0

タイマーのwhileループを遅くする助けが必要です。私はプラットフォームゲームを作っており、ピクチャーボックス(ブロック)を前後に移動したいと思っています。これは成功しました。しかし、ブロックは非常に速く動いているので、それ以外のことは遅れてしまいます。どんな助けもありがとう!タイマーの中でwhileループを遅くする方法

 private void timer2_Tick(object sender, EventArgs e) 
    { 

     while (block.Left > (ClientSize.Width-ClientSize.Width)) 
     { 

      block.Left -= 1; 
      if (block.Left == (ClientSize.Width - ClientSize.Width)) 
      { 
       break; 
      } 

     } 
     while (block.Right < ClientSize.Width) 
     { 

      block.Left += 1; 
      if (block.Right == ClientSize.Width) 
      { 
       break; 
      } 
     } 
    } 
} 
+0

遅延を注入するのに 'Thread.Sleep(1000)'や 'Task.Delay'を使うことができます –

+0

あなたの質問に似たものがあります:[これはおそらく役に立ちます](http://stackoverflow.com/questions/) 3486672/c-sharp-timer-slow-down-a-loop) –

+4

whileループを取り除き、単一のタイマーティックがブロックを1つずつインクリメントするようにします。 1より大きい必要がある場合は、* velocity *変数が必要です。 –

答えて

0

あなたは、サンプルコードを見ることができることを行うためのスレッドを使用することができます。

private void timer2_Tick(object sender, EventArgs e) 
    { 

     while (block.Left > (ClientSize.Width-ClientSize.Width)) 
     { 
      Thread.Sleep(50); //how about putting sleep here for 50ms? 
      block.Left -= 1; 
      if (block.Left == (ClientSize.Width - ClientSize.Width)) 
      { 
       break; 
      } 

     } 
     while (block.Right < ClientSize.Width) 
     { 
      Thread.Sleep(50); //how about putting sleep here for 50ms? 
      block.Left += 1; 
      if (block.Right == ClientSize.Width) 
      { 
       break; 
      } 
     } 
    } 
+0

スレッドはピクチャボックスを遅くしましたが、残念ながらこの解決策で私の主人公を移動することはできません。ありがとう! – Chrizzy

0

あなたはタイマーティックの間隔を変更することができます。これはIntervalプロパティを使用して行います。

timer2.Interval = 1000; //This would make the timer tick every second. 

この値は、ティック間のミリ秒数を表します。

これを行うと、チックイベント内のコードを変更することができます。これにより、チックイベントに基づいて1回だけ動くようになります。これにより

private void timer2_Tick(object sender, EventArgs e) 
{ 
    if (block.Left < (ClientSize.Width-ClientSize.Width) 
    { 
     block.Left -= 1; 
    } 

    if (block.Right > (ClientSize.Width-ClientSize.Width) 
    { 
     block.Left += 1; 
    } 
} 

、あなたはtimer2.Intervalプロパティで移動速度を調整することができるようになります。

+0

私は間隔を試しましたが、すべてが片側で停止します。私はより遅い連続的な動きを作る方法を探しています。 "if"を使用しても動作しない場合、永遠に一方の側に移動します。ありがとう! – Chrizzy

+0

これは適切な方法です。しかし、コードは非常にバグが多いです...間違った比較や変数(および遅延のように高い)。 – Phil1970

関連する問題