Form の Click Event

Form の Click Event で Game1 のキャラクタを動かします。

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

プログラムの説明

  1. XNA で作成したゲームプログラムを Form に貼り付けたボタンのクリックでコントロールします。
    Form の表示は XNA で Form を使う を参照して下さい。
  2. MyForm.cs はC#と同様に「デザイン画面とコードの表示」を切り替えることが出来ます。
    デザイン画面を表示して[ツールボックス]タブをクリックし、[コモン コントロール]にある[Button]を選択し、フォームに貼り付けます。
    中央に STOP ボタンを、STOP の上下に UP, DOWN のボタンを、左右に LEFT, RIGHT のボタンを貼り付けます。
    ボタンの配置に合わせて、Form のサイズも調整することが出来ます。
    それぞれの Button にID(STOP, UP, DOWN, LEFT, RIGHT)を設定して下さい。
    ボタンを貼り付けると MyForm.cs に InitializeComponent() メソッドのソースコードが追加されます。
    InitializeComponent() にはデザイン画面で編集した画面定義が格納されます。
    また MyForm.cs の子フォルダーに MyForm.resx のリソースファイルが作成されます。
    詳細は 前田稔の超初心者のプログラム入門 から C#(Frame Work)入門のページ を参照して下さい。
  3. 5個のボタンに対して、クリックされたときのイベントメソッドを設定します。
    ボタンを選択して、プロパティウインドウのイベントアイコン(稲妻型)をクリックして一覧を表示します。
    右にあるコンボ ボックスに「Button1_Click」と入力して [Enter] キーを押すと、MyForm.cs にイベントメソッドが追加されます。
    5個のボタンに対して Button1_Click〜Button5_Click のイベンットを設定して下さい。
  4. MyForm の Constructor に InitializeComponent() を呼び出すコードを追加します。
    このコードを追加すると Form にボタンが貼り付けられます。
        // コンストラクタ
        public MyForm(Game1 game1)
        {
            InitializeComponent();
            this.game = game1;
        }
    
  5. Button1_Click にボタンがクリックされたときの処理を記述します。
    XNA の class Game1 の STOP_Click() メソッドを呼び出します。
    同様に Button1_Click〜Button5_Click のメソッドも作成して下さい。
    これで MyForm.cs の準備は完了です。
            private void Button1_Click(object sender, EventArgs e)
            {
                game.STOP_Click();
            }
    
  6. MyForm.cs を受けて画像を描画する Game1.cs を作成します。
    アニメーションしながらキャラクタを動かすプログラムは、関連する XNA のページを参照して下さい。
    ここでは主要な所だけ説明します。
    Dir はキャラクタの向きを示す領域です。
    0〜3 のときは、上下左右にアニメーションしながらキャラクタが動きます。
    4〜7 のときは、上下左右の方向を向いたまま、その場で停止します。
    int Dir = 2; // キャラクタの向き(0〜3, 4〜7)
  7. MyForm.cs のボタンクリックで呼び出されるメソッドです。
            // STOP Button Click
            public void STOP_Click()
            {
                Dir |= 4;
            }
            // UP Button Click
            public void UP_Click()
            {
                Dir = 0;
            }
            // DOWN Button Click
            public void DOWN_Click()
            {
                Dir = 2;
            }
            // LEFT Button Click
            public void LEFT_Click()
            {
                Dir = 3;
            }
            // RIGHT Button Click
            public void RIGHT_Click()
            {
                Dir = 1;
            }
        
  8. キャラクタを描画する Draw() メソッドです。
    0〜3 のときは、上下左右にアニメーションしながらキャラクタが動きます。
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin();
                frame = (Dir%4) * 2;
                if (Dir < 4)
                {
                    frame += ((int)gameTime.TotalGameTime.TotalMilliseconds / 200) % 2;
                }
                spriteBatch.Draw(image, Pos, new Rectangle(0, 32*frame, 32, 32), Color.White);
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
    

【NOTE】

デザイン画面を使う方法は、初心者には解り易いかも知れませんが、慣れてくると煩わしく感じます。
デザイン画面を使わないで、直接 Form にボタンを貼り付ける方が手間もかからず、スマートなプログラムを作成することが出来ます。
  1. MyForm.cs のコンストラクタにボタンを貼り付けるコードを直接記述します。
    コードは InitializeComponent() メソッドを参考にして下さい。
  2. MyForm.cs にボタンクリックのイベントメソッドを追加します。
    メソッドの書き方は InitializeComponent() メソッドを参考にして下さい。
  3. InitializeComponent() メソッドを使わないので、これを呼び出すコードは不用です。
    またデザイン画面を使ったときに自動的に作成される MyForm.resx も不用です。

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

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