我正在创建一个Galaga类型的游戏,我将重点放在船的移动上。我有这个代码:我该如何检查键盘状态?而不是使用事件处理程序
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left)
{
moveLeft();
}
else if (e.Key == Key.Right)
{
moveRight();
}
else if (e.Key == Key.Space)
{
bullet();
}
}
private async void bullet()
{
Line bullet = new Line();
bullet.X1 = Canvas.GetLeft(testMovement) + (testMovement.Width/2);
bullet.Y1 = Canvas.GetTop(testMovement);
bullet.X2 = bullet.X1;
bullet.Y2 = bullet.Y1 + 3;
bullet.Stroke = new SolidColorBrush(Color.FromRgb(255,255,255));
bullet.StrokeThickness = 3;
horizontalMove.Children.Add(bullet);
for (int i = 0; i < 50; i++)
{
await Task.Delay(20);
shoot(bullet);
}
horizontalMove.Children.Remove(bullet);
}
private void shoot(Line bullet)
{
bullet.Y2 = bullet.Y1;
bullet.Y1 -= 5;
}
int x = 0;
private void moveRight()
{
if (x>=0 && x <= 370)
{
if(x == 370)
{
x -= 10;
}
Canvas.SetLeft(testMovement, x += 10);
}
else
{
if (x < 0)
x = 0;
else
x = 370;
}
label.Content = x ;
}
private void moveLeft()
{
if (x>=0 && x <= 370)
{
if (x == 0)
{
x += 10;
}
Canvas.SetLeft(testMovement, x -= 10);
}
else
{
if (x < 0)
x = 0;
else
x = 370;
}
label.Content = x;
}
private void Window_KeyUp(object sender, KeyEventArgs e) {}
}
这个代码的问题是,当我改变方向时,它有一定的延迟,动画不是那么平滑。
因此,如果我不想使用事件处理程序来不断检查键盘的状态(例如,是否单击左键,右键或空格),应如何继续?
首先,我想更换别的'地狱if'用开关 – Qrchack
此外,什么是运动应该是什么样子的?你不断前进,只是转向左/右? – Qrchack
其简单的左右水平移动。并且空间会垂直拍摄子弹 – Danny