3

現在、XNA/C# で開発しています。ユーザーがキー ( Keys.Right) を押したら、オブジェクトを移動する必要があります。こうなってほしい

  1. ユーザーがキーを押したとき
  2. ユーザーがキーを押している間は 1 秒後、その後は 0.25 秒ごと。

私はすでに最初のものを実装しました:

_kbOld = _kbNew;
_kbNew = _kb.GetState();
if(_kbNew.IsKeyDown(Keys.Right) &&
   _kbOld.IsKeyUp(Keys.Right))
{
    //Do something
}

他のアクションはどうすればよいですか?私は次のアイデアを持っていました:

  • A 、最後の sQueue<KeyboardState>を追跡するKeyboardState

  • キーを最後に押した時刻と離した時刻の保存 ( GameTime)

Windows でのテキスト入力のように機能するはずです。文字を保持すると、一定時間後に繰り返されます。

どの方法を使用すればよいですか? 他のアイデアはありますか?

前もって感謝します!

4

3 に答える 3

2

あなたが提案したように、私は単に最後のプッシュ時間を保存します:

if (IsPressed())
{
    // Key has just been pushed
    if (!WasPressed())
    {
        // Store the time
        pushTime = GetCurrentTime();

        // Execute the action once immediately
        // like a letter being printed when the button is pressed
        Action();
    }

    // Enough time has passed since the last push time
    if (HasPassedDelay())
    {
        Action();
    }   
}
于 2013-02-11T12:36:52.493 に答える
0

I recall from doing something similar in javascript that

  1. you create a timer, set its interval to 1 second, and then enable it on mousedown (keydown in your case). You will reset and disable it on keyup.
  2. The second step is to tie your behaviour to the the Tick() event.
  3. The third step is to check, inside your Tick() handler, if the state of Keys.Right is down and if not, to reset the timer.
于 2013-02-11T12:28:30.353 に答える
0

独自の Key および Keyboard クラスを作成することをお勧めします。キーボードでは、このような高度な機能を使用できるすべてのキーの状態を更新する updateInput() メソッドを作成できます。Key クラスでは、使用できます

キーが最後に押された時刻と離された時刻の保存 (GameTime)

@JuannStrauss確かにタイマーではありません。

于 2013-02-11T12:31:57.953 に答える