私は自分が行った非常に簡単なポンテスト用のメニューシステムの開発に取り組んでおり、サムスティックで問題が発生しました。私が見たいくつかの例は、メニュー画面のオプションを上下に移動するコードを次のように示しています。
if (controller.Thumbsticks.Left.Y > 0.5f) MenuUp();
これは理論的には機能しますが、このテストはフレームごとに実行され(Update()
表面上は呼び出し中)、コントローラーの状態を1秒間に約60回チェックします。平均的なユーザーは少なくとも1/4秒間サムスティックを押し続けるため、コントローラーのサムスティックをタップすると、メニュー全体がほぼ瞬時に循環します。
最後のメニュー項目が変更されてからどれくらいの時間、サムスティックが押されているかをチェックする、ある種の複雑なタイマーシステムを実装することもできますが、私が見つけたWeb上のサンプルはどれもそのような複雑なタイミングシステムを使用していません。私は何かが足りないのですか?
編集:アンドリューは、私が見つけたこれらのチュートリアルへのリンクを以下のコメントで尋ねました:
- これは使用します
if (controller.isButtonPressed(Buttons.LeftThumbstickUp))
が、同じ考えです。
http://create.msdn.com/en-US/education/catalog/sample/game_state_management - これはXNA2.0(4.0で作業しています)ですが、原則はそのままです
http://www.sgtconker.com/2010/08/nick-gravelyns-alien-aggressors-tutorial/ - また、ChadCarterの「MicrosoftXNAGame Studio 3.0 Unleashed」(530ページ)にも同様のコードが示されています。彼のシステムは以前のゲームパッドの状態をチェックするため、彼のシステムはいくつかのオプションを即座にスクロールしませんが、まったくスクロールすることもできません-メニューオプションを上に移動するたびに、サムスティックを後ろに移動する必要があります中央に配置して、もう一度押し上げます。キーボードのキーを押したままにしたときのような動作を探しています。1つの文字が表示され、わずかに遅れてから、測定されたペースで文字が繰り返され始めます。