我有一个使用SFML C++编写的贪吃蛇游戏,现在我被两个选项困住了。如果我这样设置控制:
if(event.type == sf::Event::KeyPressed && (event.key.code == sf::Keyboard::Up
|| event.key.code == sf::Keyboard::W) && move != Down)
move = Up;
else if(event.type == sf::Event::KeyPressed && (event.key.code == sf::Keyboard::Down
|| event.key.code == sf::Keyboard::S) && move != Up)
move = Down;
else if(event.type == sf::Event::KeyPressed && (event.key.code == sf::Keyboard::Left
|| event.key.code == sf::Keyboard::A)&& move != Right)
move = Left;
else if(event.type == sf::Event::KeyPressed && (event.key.code == sf::Keyboard::Right
|| event.key.code == sf::Keyboard::D) && move != Left)
move = Right;
这里,控制非常灵敏。问题在于,例如,如果蛇正在向右移动,您快速连续按下“上”和“左”键,则蛇尚未向上移动,但是上方向控制将被缓冲,因此蛇将被允许向左移动,并最终死亡。
如果我将这些运动条件包装在if语句中,每帧仅允许更新一次,则可以解决该错误,但控制响应速度会大大降低。
因此,我的问题是,如何在避免移动到自身的错误的同时保持快速更新运动的灵敏度?
enum Direction{Up, Down, Left, Right};
,还要跟踪以前的方向吗?好的,我觉得有道理。我会尝试实现它,谢谢。 - Austin