在 XNA 中等待 KeyPressed
Waiting while KeyPressed in XNA
我正在尝试学习 XNA 游戏编程,现在我想等待按下某个键
我有测试它:
while (IsKeyPressed = Keyboard.GetState().IsKeyDown(key));
但 IsKeyPressed 在释放按键时也为真
该代码实际上是一个自旋锁。 不要使用自旋锁.
您看到的错误可能是因为您正在使用自旋锁,它没有机会正确更新。
相反,您应该读取按下的键,并在与停止处理相关的任何 class 中设置状态(可能是 Update
函数中的简单 if
检查)。然后,当您检测到释放时,您更改状态,以便 if
检查将通过。
类似于:
//Main Update
if (Keyboard.GetState().IsKeyDown(key))
myObject.Wait();
else
myObject.Continue();
//Other object
public void Wait()
{
waiting = true;
}
public void Continue()
{
waiting = false;
}
public void Update()
{
if (!waiting)
{
//Update state
}
}
您始终可以检查以前的状态以避免重复调用 Wait
和 Continue
,但这将是对所提供代码的微优化。
我正在尝试学习 XNA 游戏编程,现在我想等待按下某个键 我有测试它:
while (IsKeyPressed = Keyboard.GetState().IsKeyDown(key));
但 IsKeyPressed 在释放按键时也为真
该代码实际上是一个自旋锁。 不要使用自旋锁.
您看到的错误可能是因为您正在使用自旋锁,它没有机会正确更新。
相反,您应该读取按下的键,并在与停止处理相关的任何 class 中设置状态(可能是 Update
函数中的简单 if
检查)。然后,当您检测到释放时,您更改状态,以便 if
检查将通过。
类似于:
//Main Update
if (Keyboard.GetState().IsKeyDown(key))
myObject.Wait();
else
myObject.Continue();
//Other object
public void Wait()
{
waiting = true;
}
public void Continue()
{
waiting = false;
}
public void Update()
{
if (!waiting)
{
//Update state
}
}
您始终可以检查以前的状态以避免重复调用 Wait
和 Continue
,但这将是对所提供代码的微优化。