GUI的缩略图控制在菜单选项中循环过快

时间:2010-12-13 03:47:21

标签: user-interface xna xbox

我正在开发菜单系统,用于进行非常简单的乒乓测试,并且用拇指杆遇到了一些问题。我看到的几个例子显示了在菜单屏幕上上下移动选项的代码:

if (controller.Thumbsticks.Left.Y > 0.5f) MenuUp();

虽然这在理论上是有效的,但是这个测试是每帧运行的(在Update()调用中,表面上是),每秒大约检查控制器状态60次。由于普通用户至少可以将拇指操纵杆按住大约四分之一秒,因此控制器拇指操纵杆的敲击几乎立即在整个菜单中循环。

我可能会实现某种复杂的计时器系统,它可以检查自上次菜单项更改后的时间以及拇指操纵杆的持续时间,但是我发现网上没有任何样本使用这么复杂的计时系统。我错过了什么吗?

编辑:安德鲁在下面的评论中询问了我找到的这些教程的链接:

  • 这个使用if (controller.isButtonPressed(Buttons.LeftThumbstickUp)),但它是相同的想法 http://create.msdn.com/en-US/education/catalog/sample/game_state_management
  • 我意识到这个是XNA 2.0(我正在使用4.0),但原则仍然是 http://www.sgtconker.com/2010/08/nick-gravelyns-alien-aggressors-tutorial/
  • 另外,Chad Carter的“Microsoft XNA Game Studio 3.0 Unleashed”一书(第530页)显示了类似的代码。他的系统检查以前的游戏手柄状态,因此他的系统不会立即滚动几个选项,但它也不会让你滚动 - 每次你想要提升菜单选项时,你必须将拇指操纵杆移回中心并再次将其向上推。我正在寻找更像是当你按住键盘上的键时的行为:出现一个字母,稍有延迟,然后开始以一定的速度重复这个字母。

1 个答案:

答案 0 :(得分:1)

您已经连接了几个成功的教程来演示这种技术。这究竟是什么问题?基本前提是,如果您只是检查/移动每一帧,结果对于用户来说是不可理解的。

最简单的选择是保持控制器的“先前状态”。如果在最后一帧中已按下“向下”,则禁止移动菜单选项。这使得一个用户操作仅用于处理一次。