我正在Visual Studio 2017的Allegro 5游戏中实现操纵杆控件。我尝试过两种方法:通过让事件队列在主循环中侦听操纵杆事件,以及在主循环中每帧更新一次ALLEGRO_JOYSTICK_STATE
操纵杆的当前状态。但是,当查看操纵杆的pos
值时,我发现在这两种情况下,当操纵杆返回中立位置时,它实际上并没有将x和y位置返回到0.0,而是返回到非常低的值(如0.01或0.02)。在大多数情况下,这不会造成问题,但是有时即使操纵杆处于空档,我的玩家也会继续非常缓慢地移动,因为pos
值太高。
有没有可靠的方法来检查操纵杆是否被按下?我最初想到的是将位置“重置”为0.0,每帧0.0,然后仅在检测到操纵杆移动时才将其更改,但是事件队列实际上并没有检测到每帧的移动,即使按住操纵杆也是如此,从而导致玩家移动时“口吃”。由于“中性”值非常低,因此我也考虑过检查它们是否低于某个值,并考虑是否为“中性”,但鉴于每次放开时我看到不同的数字,这似乎非常不可靠。操纵杆,我不确定它们能走多高。
最佳答案
值从-1.0到1.0不等。您可能希望拥有一个“死区”,其中任何值(例如小于0.05)都将被视为0。最终,您可以让玩家进行配置。
使用事件比轮询更可取,因为这样可以避免两次轮询之间遗漏事件的风险。
关于c++ - Allegro 5:检查操纵杆是否为 “neutral”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44231587/