所以我试图自己制作一个完整的游戏,并且我进入了制作库存的部分。我想在 E 键上进行切换输入以打开库存,但是当我在游戏中尝试该功能时,有时当我按 E 时,我的库存会同时打开和关闭,有时当它打开时,它不会当我按E时,它不会关闭,但是当我再次按E时,它会关闭。
代码如下: ` int isOpen = 库存->isOpen;
if (inventory->isOpen == NO && sfKeyboard_isKeyPressed(sfKeyE)) {
openInventory(inventory);
inventory->isOpen = YES;
return;
}
if (isOpen == YES && sfKeyboard_isKeyPressed(sfKeyE)) {
closeInventory(inventory);
inventory->isOpen = NO;
return;
}`
我尝试用 0.10f 的刻度来同步 sfClock 上打开的库存,就像我用来为播放器精灵设置动画的刻度一样,但仍然不起作用。
有办法解决这个问题吗?
感谢您的阅读!
按下该键时,您的库存屏幕可能会反复打开和关闭。这是因为以下原因。
在循环的第一次迭代中,按下键并且库存屏幕未打开,因此它被打开。
在循环的第二次迭代中,仍然按下键,并且库存屏幕打开,因此它被关闭。
迭代听起来只有 0.01 秒的间隔,并且因为 sfKeyboard_isKeyPressed 只是键盘的 current 状态,所以您需要手动检测何时新按下一个键。 (无论如何,对于这样的事情,角色移动通常可以基于当前状态。)
您应该存储按键的先前状态,并且仅在按键从未按下变为按下时才执行库存打开/关闭逻辑。例如:
bool previousKeyState = false;
// main loop
{
keyState = sfKeyboard_isKeyPressed(sfKeyE);
if ((!previousKeyState) && (keyState))
{
if (inventory->isOpen == NO) {
// etc
}
}
previousKeyState = keyState;
}