2017-05-28 91 views
1

我在Visual Studio 2017中的Allegro 5游戏中实现了游戏杆控件。我尝试了这两种方法:通过让我的事件队列在主循环中侦听游戏杆事件,并在游戏杆的当前状态下在我的主循环中每帧更新一次ALLEGRO_JOYSTICK_STATE。但是,在查看游戏杆的pos值时,我发现在这两种情况下,当杆返回中性时,实际上并没有将x和y位置返回到0.0,而是返回非常低的值,如0.01或0.02。大多数情况下,这并不会导致问题,但即使操纵杆处于中立位置,我的玩家偶尔也会继续缓慢移动,因为这些值太高。Allegro 5:检查游戏杆是否为“中性”

是否有可靠的方法来检查操纵杆是否被推动?我最初想到的是将每个帧的位置“重置”为0.0,0.0,然后仅在检测到操纵杆移动时才更改该位置,但即使按下操纵杆,事件队列也不会实际检测到每帧移动,导致玩家移动时“口吃”。由于“中性”价值很低,我还考虑检查它们是否低于某个价值,如果它们是“中性”的话,但这看起来非常不可靠,因为每次我放弃时都会看到不同的数字操纵杆,我不知道他们可以走多高。

+0

这个问题当然可以与您的操纵杆。尝试重新校准。懒惰的解决方案是限制你的价值来限制接近中立的位置,但这可能会影响游戏性。 – Rook

回答

1

数值从-1.0到1.0不等。您可能希望有一个“死区”,其中任何小于0.05的值都被视为0.最终,您可以让玩家配置它。

使用事件优于轮询,因为您可以避免轮询之间丢失事件的风险。

+0

谢谢。我使用0.05作为死区,它通常似乎工作。我也可以按照您的建议进行配置。 – user3726962