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); }
これで画像の表示確認まではできたので、明日は「入力の対応」に入る。