2Dアクション・テンプレート:画像の表示(特殊部分)

=画像用のクラス作成=

「画像」のクラスはすでにある(ImageとかBitmapとか)ので、「画像の生成・管理を行うマネージャ」のクラスだけ追加で用意する。
「画像の一元管理」のために、このクラスもSingletonのように扱えるようにしておく。しかし、特にインスタンスを生成する必要性もないので、「関数が全部static」というクラス(ImageManager)として作成することにする。


いまのところ必要な画像は「プレイヤー」と「地面」だけなので、この二つを生成する関数を作る。

=関数:プレイヤー画像の生成=

作成する関数は、「右向きのプレイヤーの画像」を返す関数にする。(アニメーションまで考えると別のものが良いが、ひとまずこれで)


具体的には、次のようになる。

//=Player=
[Embed(source='Player.png')]
 private static var Bitmap_Player: Class;

static public function LoadImage_Player():Image{
  var bmp:Bitmap;
  {
    bmp = new Bitmap_Player();

    //画像の中心を原点に持ってくる
    bmp.x = -bmp.width/2;
    bmp.y = -bmp.height/2;
  }

  var result:Image;
  {
    result = new Image();
    result.addChild(bmp);
  }

  return result;
}

ここでは、「画像の中心が原点になる」ように設定している。これは、あとで物理エンジンと組み合わせた時に「当たり判定の中心」と「画像の中心」が一致していた方が作業が楽だからだ。

=関数:地面画像の生成=

こちらもプレイヤーの処理とたいして変わらないので、具体的な部分は省略。「Player」→「Block」で置き換えて、別の画像を生成する関数を用意しておく。

=表示側の準備=

アクションゲームの画面は大別して「ステージ用のグラフィック(スクロールする)」と「インターフェース用のグラフィック(スクロールしない)」の二種類のグラフィックに分けられる。そこで、これら二つをダミーのグラフィックとして作成し、Mainの下に付けておく。プレイヤーやエネミーは「ステージ用のグラフィック」の下に、体力バーなどは「インターフェース用のグラフィック」の下につけるようにすれば、「ステージ用のグラフィック」をスクロールさせることで、「プレイヤーやエネミーのグラフィックはスクロールし、体力バーなどはスクロールしない」ということが可能になる。


具体的には、以下のコードをMainに追加する。


メンバ変数

//メイン画面
private var m_GraphicParent_Game:Image;
private var m_GraphicParent_Interface:Image;


Initに追加

//==画面に相当する部分の初期化==
{
  //オブジェクトが動き回る用
  m_GraphicParent_Game = new Image();
  addChild(m_GraphicParent_Game);

  //インターフェースの表示など用
  m_GraphicParent_Interface = new Image();
  m_GraphicParent_Interface.width = CAMERA_W;
  m_GraphicParent_Interface.height = CAMERA_H;
  addChild(m_GraphicParent_Interface);
}

=表示確認=


以上で準備は整ったので、実際に表示してみる。


MainのInit(の最後の方)に、以下のコードを追加する。

//==Image==
{
  var img:Image;
  {
    //プレイヤーの画像を生成
    img = ImageManager.LoadImage_Player();

    //画面の中心に移動
    img.x = 0.5*CAMERA_W;
    img.y = 0.5*CAMERA_H;
  }

  //スクロールする画面にくっつける
  m_GraphicParent_Game.addChild(img);
}


これで画像の表示確認まではできたので、明日は「入力の対応」に入る。