XNA 对角线移动键释放
XNA Diagonal Movement Key Release
好的,假设您正在玩自上而下的游戏。您按 W
和 D
向右上方向移动。现在您只想向右走,所以您松开 W
键。人们会期望您随后改变方向并向右行驶,但相反,您继续向右行驶。我该怎么做才能解决这个问题?
这是我的代码:
if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
{
if (kb.IsKeyDown(Keys.W))
velocity.Y = -movespeed;
else if (kb.IsKeyDown(Keys.A))
velocity.X = -movespeed;
else if (kb.IsKeyDown(Keys.S))
velocity.Y = movespeed;
else if (kb.IsKeyDown(Keys.D))
velocity.X = movespeed;
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = movespeed;
}
}
else
velocity *= .9f;
position += velocity;
所以经过几个小时的奋斗,我自己找到了答案。
在检查生效之前简单地将速度设置为零:
编辑:将它乘以 .89 实际上可以使运动更加平滑。
if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
{
velocity *= .89f
if (kb.IsKeyDown(Keys.W))
velocity.Y = -movespeed;
if (kb.IsKeyDown(Keys.A))
velocity.X = -movespeed;
if (kb.IsKeyDown(Keys.S))
velocity.Y = movespeed;
if (kb.IsKeyDown(Keys.D))
velocity.X = movespeed;
}
else
velocity *= .9f;
好的,假设您正在玩自上而下的游戏。您按 W
和 D
向右上方向移动。现在您只想向右走,所以您松开 W
键。人们会期望您随后改变方向并向右行驶,但相反,您继续向右行驶。我该怎么做才能解决这个问题?
这是我的代码:
if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
{
if (kb.IsKeyDown(Keys.W))
velocity.Y = -movespeed;
else if (kb.IsKeyDown(Keys.A))
velocity.X = -movespeed;
else if (kb.IsKeyDown(Keys.S))
velocity.Y = movespeed;
else if (kb.IsKeyDown(Keys.D))
velocity.X = movespeed;
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.W) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = -movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.D))
{
velocity.X = movespeed;
velocity.Y = movespeed;
}
else if (kb.IsKeyDown(Keys.S) && kb.IsKeyDown(Keys.A))
{
velocity.X = -movespeed;
velocity.Y = movespeed;
}
}
else
velocity *= .9f;
position += velocity;
所以经过几个小时的奋斗,我自己找到了答案。
在检查生效之前简单地将速度设置为零: 编辑:将它乘以 .89 实际上可以使运动更加平滑。
if (kb.IsKeyDown(Keys.W) || kb.IsKeyDown(Keys.A) || kb.IsKeyDown(Keys.S) || kb.IsKeyDown(Keys.D))
{
velocity *= .89f
if (kb.IsKeyDown(Keys.W))
velocity.Y = -movespeed;
if (kb.IsKeyDown(Keys.A))
velocity.X = -movespeed;
if (kb.IsKeyDown(Keys.S))
velocity.Y = movespeed;
if (kb.IsKeyDown(Keys.D))
velocity.X = movespeed;
}
else
velocity *= .9f;