繁体   English   中英

如何为重力添加计时器?

[英]How to add a timer to gravity?

private void KeyIsDown(object sender, KeyEventArgs e)
    {
        if(e.Key == Key.Space)
        {
            flappyBird.RenderTransform = new RotateTransform(-20, flappyBird.Width / 2, flappyBird.Height / 2); 

            gravity = -8;
            


        }
        if(e.Key == Key.R && gameOver == true)
        {
            StartGame();

        }
    }

我是 c# 的新手,并且希望在按下空格键后将重力 (-8) 设为 x 秒,然后将重力恢复为正常 (8),无论按键保持多长时间。 我遵循了一个旧的 Flappy Bird 教程,但想改进代码。

任何帮助表示赞赏!

此代码每次向下闪烁-20 degrees并返回到第一个 state。 如果在旋转时按下空格键,则在该过程完成之前它不会响应。

我还评论了要测试的部分代码。

bool isTimerRun = false;
double gravity = 0;
bool down = true;
private void KeyIsDown(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Space)
   {
      if(!isTimerRun)
      {
          System.Timers.Timer timer = new System.Timers.Timer();
          timer.Interval = 40;
          timer.Elapsed += Timer_Elapsed;
          timer.Start();
          isTimerRun = true;
      }
   }
   //if (e.Key == Key.R && gameOver == true)
   //{
   //    StartGame();
   //}
}
       
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
   if(down)
   {
       gravity--;
       Dispatcher.Invoke(() =>
       {
           flappyBird.RenderTransform = new RotateTransform(gravity, flappyBird.Width / 2, flappyBird.Height / 2);
       });
       if (gravity < -20)
       {
           down = false;
           gravity++;
       }
  }
  else
  {
      gravity++;
      Dispatcher.Invoke(() =>
      {
         flappyBird.RenderTransform = new RotateTransform(gravity, flappyBird.Width / 2, flappyBird.Height / 2);
      });
      if (gravity > 0)
      {
         down = true;
         gravity--;

         var timer = sender as System.Timers.Timer;
         timer.Stop();
         isTimerRun = false;
      }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM