[英]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.