Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface GUI的拇指棒控制在菜单选项之间循环过快_User Interface_Xna_Xbox - Fatal编程技术网

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仪表板演示了此功能。它可以让你按住大拇指在所有菜单上滚动,但速度是人类可读的。如果这是你想要的行为,是的,你必须实现一个计时器机制,规定它滚动的时间。该状态应记录上次启动滚动的时间,然后在给定时间过后再次启动滚动。