所以我正在开发一款游戏/应用程序 - 2D赛车游戏,我正在尽我所能,但我已经研究过C#1年了。 我的问题是我有两个图像(简单的汽车),我可以通过KeyData移动它们的位置。它起作用,除非我希望它们两个一次移动。 这就是我用=>
移动它的原因protected override bool Move(ref Message msg, Keys KeyData)
{
if (KeyData == Keys.Up)
{
bluePoint.Y -= normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.Down)
{
bluePoint.Y += normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.Left)
{
bluePoint.X -= normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.Right)
{
bluePoint.X += normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.W)
{
redPoint.Y -= normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.S)
{
redPoint.Y += normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.A)
{
redPoint.X -= normalSpeed;
Refresh();
return true;
}
if (KeyData == Keys.D)
{
redPoint.X += normalSpeed;
Refresh();
return true;
}
return true;
}
答案 0 :(得分:1)
键是flags enum,因此所有信息都在那里,您可能应该重写if语句。为方便起见,Enum有HasFlag方法:
if( keyData.HasFlag( Keys.Up ) )
在处理你的一把钥匙之后你也可能不应该return true
有关旗帜的更多信息:What does the [Flags] Enum Attribute mean in C#?
protected override bool Move(ref Message msg, Keys KeyData)
{
if (KeyData.HasFlag(Keys.Up))
{
bluePoint.Y -= normalSpeed;
}
if (KeyData.HasFlag(Keys.Down))
{
bluePoint.Y += normalSpeed;
}
if (KeyData.HasFlag(Keys.Left))
{
bluePoint.X -= normalSpeed;
}
if (KeyData.HasFlag(Keys.Right))
{
bluePoint.X += normalSpeed;
}
if (KeyData.HasFlag(Keys.W))
{
redPoint.Y -= normalSpeed;
}
if (KeyData.HasFlag(Keys.S))
{
redPoint.Y += normalSpeed;
}
if (KeyData.HasFlag(Keys.A))
{
redPoint.X -= normalSpeed;
}
if (KeyData.HasFlag(Keys.D))
{
redPoint.X += normalSpeed;
}
Refresh();
return true;
}