User interface GUI的拇指棒控制在菜单选项之间循环过快
我正在为我做的一个非常简单的乒乓球测试开发菜单系统,但在使用拇指棒时遇到了一些问题。我看到的几个示例显示了在菜单屏幕上上上下移动选项的代码,如下所示:User interface GUI的拇指棒控制在菜单选项之间循环过快,user-interface,xna,xbox,User Interface,Xna,Xbox,我正在为我做的一个非常简单的乒乓球测试开发菜单系统,但在使用拇指棒时遇到了一些问题。我看到的几个示例显示了在菜单屏幕上上上下移动选项的代码,如下所示: if (controller.Thumbsticks.Left.Y > 0.5f) MenuUp(); 虽然这在理论上是可行的,但该测试每帧运行一次(表面上是在Update()调用中),大约每秒检查控制器状态60次。由于一般用户将竖起拇指棒至少四分之一秒,因此,点击控制器拇指棒几乎可以立即在整个菜单中循环 我可能会实现某种复杂的计时器系统
if (controller.Thumbsticks.Left.Y > 0.5f) MenuUp();
虽然这在理论上是可行的,但该测试每帧运行一次(表面上是在Update()
调用中),大约每秒检查控制器状态60次。由于一般用户将竖起拇指棒至少四分之一秒,因此,点击控制器拇指棒几乎可以立即在整个菜单中循环
我可能会实现某种复杂的计时器系统,它会检查上次菜单项更改后的时间,以及大拇指被竖起的时间,但我发现在web上没有一个示例使用如此复杂的计时系统。我错过什么了吗
编辑:安德鲁在下面的评论中询问我找到的这些教程的链接:
- 这一个使用了
但是这是相同的想法。if(controller.isButtonPressed(Buttons.LeftThumbstickUp))
- 我意识到这是XNA 2.0(我正在使用4.0),但原则仍然是
- 另外,Chad Carter在第530页的《微软XNA游戏工作室3.0发布版》一书中也展示了类似的代码。他的系统检查之前的gamepad状态,因此他的系统不会立即滚动几个选项,但它也不允许你滚动-每次你想向上移动菜单选项时,你必须将拇指杆移回中心并再次向上推。我在寻找的行为更像是当你按住键盘上的一个键时:出现一个字母,稍微延迟,然后开始以测量的速度重复字母
最简单的选择是保持控制器的“先前状态”。如果在最后一帧中已按下“向下”,则禁止移动菜单选项。这使得down的一个用户操作只处理一次。如果您链接了一些正在执行此操作的教程,可能会有所帮助?问题是如何滚动。例如,我如何允许用户简单地按住拇指并“滚动”多个选项。使用Chad Carter的系统,它只需向上移动菜单上的一个选项。但是如果用户想增加3个选项,该怎么办?他必须分别向上按三次大拇指。Xbox仪表板演示了此功能。它可以让你按住大拇指在所有菜单上滚动,但速度是人类可读的。如果这是你想要的行为,是的,你必须实现一个计时器机制,规定它滚动的时间。该状态应记录上次启动滚动的时间,然后在给定时间过后再次启动滚动。