キープレスの時間をカウント

XNA でキープレスの時間とキーアップの時間をカウントします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. XNA でスペースキーが押し続けられている時間をカウントします。
    スペースキーのアップ(キーが押されていない)状態は、次のメソッドで調べます。
        if (Keyboard.GetState().IsKeyUp(Keys.Space))
        {
        } 
        
    同様にスペースキーのダウン(キーが押されている)状態は、次のメソッドで調べます。
        if (Keyboard.GetState().IsKeyDown(Keys.Space))
        {
        } 
        
  2. Game1.cs の最初に、キーアップとキーダウンの状態をカウントする領域を定義します。
            int     press_cnt;  //キーダウンのカウンタ
            int     up_cnt;     //キーアップのカウンタ
        
  3. Update() メソッドでキーアップとキーダウンの状態をカウントします。
    キーが離されると press_cnt をクリアして、up_cnt をカウントします。
    キーが押されると up_cnt をクリアして、press_cnt をカウントします。
    VerMsg(); で press_cnt と up_cnt の値をタイトルバーに表示します。
            protected override void Update(GameTime gameTime)
            {
                // ゲームを終了する
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed  ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                if (Keyboard.GetState().IsKeyUp(Keys.Space))
                {
                    press_cnt = 0;
                    up_cnt++;
                } 
                if (Keyboard.GetState().IsKeyDown(Keys.Space))
                {
                    up_cnt = 0;
                    press_cnt++;
                }
                VerMsg();
    
                base.Update(gameTime);
            }
        
  4. タイトルバーに press_cnt と up_cnt を表示する VerMsg() メソッドです。
            public void VerMsg()
            {
                string wstr;
                wstr = "UP Count=" + up_cnt.ToString() + "  PRESS Count=" + press_cnt.ToString();
                base.Window.Title = wstr;
            }
        
  5. Keyboard.GetState() を別にして、次のようにコーディングすることも出来ます。
                KeyboardState keyState = Keyboard.GetState();
                if (keyState.IsKeyUp(Keys.Space))
                {
                    press_cnt = 0;
                    up_cnt++;
                } 
                if (keyState.IsKeyDown(Keys.Space))
                {
                    up_cnt = 0;
                    press_cnt++;
                }
        
  6. 一秒間に約60回カウントされることを確かめて下さい。
    この値がレンダリングサイクルと言って、画面が描画される周期です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

超初心者のプログラム入門(XNA(C#) game program)