Image & Array で弾丸を連射

Image Class & Array Class で、機関銃のように弾丸を連射します。

配列を使った連射は 弾丸を連射 を参照して下さい。
Image Object Class の説明は Image Class でアニメーション を参照して下さい。

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

プログラムの説明

  1. Space キーを押し続けると弾丸を連射します。
    Image Object Class & Array Object Class を使うと簡単にプログラム出来ます。
    Draw メソッドを呼び出す度に SpriteBatch をパラメータで渡すのはセンスが悪いと思いコンストラクタから渡すようにしてみました。
    Array Object Class のコンストラクタで SpriteBatch を渡します。
        array = new Array(spriteBatch);
        array.Init(ref ShotArray, tama, 4, 1, 1200, 800);
        
    Draw() メソッドで描画するときには spriteBatch を渡す必要は無くなります。
        array.Draw(ShotArray);      //弾の描画
        
  2. このプログラムでは、4種類の弾丸を横に並べて透明色を設定した画像を使っています。
    画像 説明
    tama4.png 4種類の弾丸を横に並べて透明色を設定した画像(32*32 を4枚)

  3. メニューから [ファイル][新規作成][プロジェクト] で新しいプロジェクトを作成して下さい。
    Game1.cs を編集して、弾丸を連射するプログラムを作成します。
    プログラムの最初に Image Object Class と Array Object Class を定義します。
    namespace Main
    {
        #region ★Image Object Class
        public class Image
        {
            //Image Object Class を定義する
        }
        #endregion
    
        #region ★Array Object Class
        //Image Class の配列を制御するクラスです。
        public class Array
        {
            //Array Object Class を定義する
        }
        #endregion
    
  4. class Game1 の最初に、次の領域を宣言して下さい。
    tama は4種類の弾丸を横に並べた画像です。
    Image[] ShotArray = new Image[20]; は連射できる弾丸の数で、最大20個の Image Class の配列を定義します。
    Array は Image Class の配列を操作する Object Class です。
            Texture2D   tama;       // 弾丸のテクスチャ
            Image[]     ShotArray = new Image[20];  // 弾丸の配列
            Array       array;      // 弾丸の配列を制御するクラス
        
  5. コンストラクタでウインドウのサイズを大きくしています。
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                graphics.PreferredBackBufferWidth = 1200;
                graphics.PreferredBackBufferHeight = 800;
                Content.RootDirectory = "Content";
            }
        
  6. LoadContent() メソッドで画像をロードして、array.Init() で Image Class の配列を初期化します。
    tama4.png は4種類の弾丸を横に並べた画像です。
    Init() メソッドのパラメータ ref ShotArray は、配列 ShotArray に初期値を設定するときの指定です。
    tama,4,1 は4枚の画像が横に並んでいることを意味し、1200,800 はウインドウのサイズです。
                // TODO: use this.Content to load your game content here
                tama = Texture2D.FromFile(graphics.GraphicsDevice, "c:\\data\\test\\tama4.png");
                // Array Object Class と Array Class を使った Image Object Class の初期化
                array = new Array(spriteBatch);
                array.Init(ref ShotArray, tama, 4, 1, 1200, 800);
        
  7. Update() メソッドで弾丸の連射と移動を行います。
    tama_shoot() が弾丸を連射するメソッドです。
    array.Move() で、配列 ShotArray に登録されている弾丸の座標を移動します。
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                tama_shoot(gameTime);       //弾丸を連射
                array.Move(ShotArray);      //弾丸の座標を移動
        
  8. Draw() メソッドに画像を描画するコードを記述します。
    array.Draw() が Image Class の配列を描画するコードです。
    本来ならばループしなければならないのですが、Array Class を使うと簡単です。
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
                array.Draw(ShotArray);      //弾の描画
                spriteBatch.End();
        
  9. 弾丸を連射するメソッド tama_shoot() です。
    Space キーの状態を調べて、一定間隔を置いて弾丸を連射します。
    array.Get() で ShotArray 配列から空いているセルを取得します。
    200 は 200_秒の間隔を置いて連射することを指示しています。
    20, 300 は弾丸の座標で、vect.X = 6 は弾丸の移動ベクトル(右に 6 移動)です。
            #region 弾丸を連射
            public void tama_shoot(GameTime gameTime)
            {   int i;
    
                if (Keyboard.GetState().IsKeyDown(Keys.Space))
                {   i = array.Get(ShotArray, gameTime, 200);
                    if (i>=0)
                    {   ShotArray[i].sp_no = 1;
                        ShotArray[i].pos = new Vector2(20, 300);
                        ShotArray[i].vect.X = 6;
                    }
                }
            }
            #endregion
        
  10. メニューの [デバッグ] から [デバッグ開始] を選択すればコンパイルされ、エラーが無ければ実行されます。
    Space キーを押し続けると、弾丸が連射されます。

【演習】

  1. 連射の弾丸数を増やして(減らして)下さい。
  2. 連射の間隔を長く(短く)して下さい。
  3. 自機を表示して、自機から弾丸を発射して下さい。

超初心者の方のためにソースコードを掲載します。 (^_^;)
ソースコード抜粋

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

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