キーの連打をカウント

XNA でキーの連打をカウントします。

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

プログラムの説明

  1. XNA で NUM1〜NUM3 キーが連打された数をカウントします。
    キーの連打は「キーが押されていない状態」と「キーが押されている状態」の組み合わせで調べます。
  2. Game1.cs の最初に、連打のカウンタとフラグと Keys の領域を定義します。
    NUM1〜NUM3 の3個のキーを同時に調べるために、配列で定義しています。
            int[]   cnt = { 0, 0, 0 };
            bool[]  flag = { true, true, true };
            Keys[]  k_code = { Keys.NumPad1, Keys.NumPad2, Keys.NumPad3 };
        
  3. Update() メソッドでキーの連打を調べます。
    キーが押されていて flag が ON のときに flag を OFF にして、カウントアップします。
    OFF にされた flag はキーが離されたときに ON に設定されます。
    VerMsg(); で NUM1〜NUM3 の連打された数をタイトルバーに表示します。
            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
                for(int i=0; i<3; i++)
                {
                    if (Keyboard.GetState().IsKeyDown(k_code[i]) && flag[i])
                    {   flag[i] = false;
                        cnt[i]++;
                    }
                    if (Keyboard.GetState().IsKeyUp(k_code[i]))   flag[i] = true;
                } 
                VerMsg();
    
                base.Update(gameTime);
            }
        
  4. タイトルバーに cnt[] を表示する VerMsg() メソッドです。
            public void VerMsg()
            {
                string wstr;
                wstr = "NUM1=" + cnt[0].ToString() + "  NUM2=" + cnt[1].ToString() + "  NUM3=" + cnt[2].ToString();
                base.Window.Title = wstr;
            }
        
  5. Keyboard.GetState() を別にして、次のようにコーディングすることも出来ます。
                KeyboardState keyState = Keyboard.GetState();
                for(int i=0; i<3; i++)
                {
                    if (keyState.IsKeyDown(k_code[i]) && flag[i])
                    {   flag[i] = false;
                        cnt[i]++;
                    }
                    if (keyState.IsKeyUp(k_code[i])) flag[i] = true;
                }
        

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

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