我的Shoot Em Up游戏已经出现问题了一段时间了,我似乎无法找到任何答案。我想只拍1枚子弹,即使我按住空格键。根据我目前的代码,我根本不会发射任何子弹。我做错了什么?
KeyboardState newState = Keyboard.GetState();
KeyboardState oldState = Keyboard.GetState();
if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space))
{
bulletList.Add(new Bullet(content.Load<Texture2D>(@"bullet"), new Vector2(initialPos.X, initialPos.Y - 28), new Vector2(2, 4), spriteBatch));
}
oldState = newState;
答案 0 :(得分:1)
您的问题是您正在检查空格键是否上下,这是不可能的。我想你应该尝试这样的事情:
bool readytofire = true;
public override void Update()
{
KeyboardState newState = Keyboard.GetState();
readytofire = !newState.IsKeyDown(Keys.Space);
if (newState.IsKeyDown(Keys.Space) && readytofire)
{
bulletList.Add(new Bullet(content.Load<Texture2D>(@"bullet"), new Vector2(initialPos.X, initialPos.Y - 28), new Vector2(2, 4), spriteBatch));
}
}
答案 1 :(得分:0)
您在检查之前正在设置旧状态,因此它将始终与newState相同。删除此行:
KeyboardState oldState = Keyboard.GetState();
第一次在循环中运行时,可能需要为oldState赋值。
答案 2 :(得分:0)
KeyboardState newState = Keyboard.GetState();
KeyboardState oldState = Keyboard.GetState();
这些将具有相同的值。
if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space))
这是检查Space键是UP还是DOWN。
两个代码片段都没有意义。这个代码在循环中吗?如果是这样,请检查空格DOWN并使用布尔标志以确保仅触发一次。然后检查空间UP,倒转标志。