0

我正在为我所做的一个非常简单的乒乓球测试开发菜单系统,并且在拇指杆上遇到了一些问题。我见过的几个示例显示了在菜单屏幕上向上和向下移动选项的代码:

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 页显示了类似的代码。他的系统会检查之前的游戏手柄状态,因此他的系统不会立即滚动浏览多个选项,但它也根本不允许您滚动- 每次您想要向上移动菜单选项时,都必须将拇指摇杆向后移动居中并再次向上推。我正在寻找更像是当您按住键盘上的一个键时的行为:出现一个字母,稍有延迟,然后开始以有节奏的速度重复该字母。
4

1 回答 1

1

您已经链接了几个演示此技术的成功教程。这里的问题到底是什么?正如您所说,基本前提是,如果您只是检查/移动每一帧,用户将无法理解结果。

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

于 2010-12-13T16:51:55.853 回答