インデックス置き場はこちら
前回はこちら
●私……バックついて欲しいな(前編)
バックグラウンドが一色というのは寂しいと思わないかい。どうでもいいような気はするが、バックグラウンドにも絵がついた方が華やかだ。背景を書き込んでみようと思うんだぜ。
背景の付け方としてはいくつか考えられる。まずは、背景画像を一枚絵で用意する方法。一枚絵を簡単に用意できれば楽チンな方法だ。
ただし、多用しすぎるとFLASHが重くなる。動作がじゃなくて読み込みが。全5ステージくらいのゲームで、各ステージに背景画像1枚ずつとかならどうってことはないが、10×10画面のフィールドをもつアクションロールプレイングゲームの全マップを一枚ずつ用意していてはそれだけで100枚の画像が必要になり、その合計サイズもそれだけ大きくなる。
今時音響カプラーとかモデムでテレホとか言う凄まじい環境の人は滅多にいないだろうし、いてもFLASHゲームなんかに手を出そうと思わないと思うのでそう言った人のことは考慮しないとしても、あんまり背景画像を増やしすぎると読み込みに時間がかかって仕方ない。ファイルの置き場にも限りがあるしな。
そのくらいになってくると、多少は使い回しできる部品を使うのが妥当だろう。スプライトに背景の部品をまとめておき、それをモリモリとattachMovieかduplicateMovieClipで複製しまくる。これが一番凝ったことができる方法だと思う。その気になればアニメーションさせたり変形させたりも自由自在だし。
しかしだ。凝ったことをする必要もなく、ただ踏みつけられるだけの背景にこの方法を使うと、処理の方が重くなることがある。特に、背景のオブジェクト数が増えた場合には。
どうせまったく動きもしない背景であるなら、スプライト数を増やして重くする必要はない。どうにかして、一枚絵に用に振る舞わせることはできないのか。……なんて言い出す時はできる時だと言うことに賢明なる諸君は気付いているだろう。
実は、FLASHにはビットマップを生成できてしまう機能が備わっている。背景に使うなんて言うしみったれたものではなく、それこそお絵かきツールなんかもあっさり作れてしまうスグレモノだ。
では、早速そのスグレモノを使えるようになる、ステキな呪文を教えてあげよう。……リファレンスから。
それは、BitmapDataクラス。まずはそのクラスを使えるようにしなくてはいけない。MovieClipにせよArrayにせよ、今までにやってきた物は基本的なクラスなので特に手続き無しに使えたのだが、このクラスは基本的ではないため、ワンステップ噛まさないと使えない。そのことはリファレンスにあるサンプルを見れば分かる。とりあえず基本中の基本を見るため、リファレンスはBitmapDataのコンストラクタのページを見てみよう。とてもシンプルなサンプルのはずだが、引数を一つ一つご丁寧に型宣言までつけて初期化してたりと無意味な手順を踏んでいる。しかし、そう言う無駄を省くとやっていることは少ない。
最初の行を見てもらうと、何かこんなことが書いてあるよな。
import flash.display.BitmapData;
そう。これがビットマップデータの封印を解く秘密の呪文になっている。
封印を解いただけじゃもちろんなんの意味もない。さらにいくつかのステップを経て、ようやくビットマップデータを使える。まずは、そのコンストラクタの呼び出しだ。
bmp = new BitmapData(width,height,transparent,fillColor);
引数のうち、widthとheightは絶対に必要。これが省かれたり、あるいは2880を超える値を指定したりするとビットマップデータの作成は失敗する。
省略可能な引数transparentはピクセル単位でアルファを有効にするかどうか、つまり細かく透けるかどうかをtrueかfalseで指定。trueだと当然それなりに重くなるだろうね。同じく省略可能なfillColorはビットマップデータを最初に塗りつぶす色を指定。省略すると真っ白になる。
こうやって作成したビットマップデータだが、これもこれだけじゃ使い物にならない。これはあくまでデータ。画面に表示させるにはその媒体が必要になってくる。その媒体はmovieClip、スプライトだ。movieClipにはattachBitmapというメソッドがある。これを使えば、そのビットマップデータをスプライトに埋め込むことができる。引数はどのビットマップデータを割り当てるのかと、スプライトの中に於けるビットマップの深度だ。他にも引数はあるが、めんどいので省く。どちらも見た目に関する細かい設定ができる引数だがキニスンナ。気になったらリファレンス見て実際に使ってみれ。
では、基本的なビットマップデータを作成して表示するまでのスクリプトをまとめてみよう。これでちっこく真っ白ビットマップデータができる。
import flash.display.BitmapData;
bmp = new flash.display.BitmapData(50,50);
bmpmc = createEmptyMovieClip("bmpmca",10);
bmpmc.attachBitmap(bmp,1);
さあ、れっつプレビュー。……あれ。なにこれ。最初の行にエラーが出ますが何事。別に打ち間違ってもいないのに。
……実は。SuzukaやParaFla!ではimportが使えないそうなのです。ええっそんな!仕方ないので1行目をごっそり削除すると、今度はエラーは出ないものの、ビットマップデータは生成されず。何と言うことでしょう。SuzukaやParaFla!ではBitmapDataクラスの利用は諦めるしかないのでしょうか。
ここまで長々と説明しておいてそんなはずはないのだ。楽な道が塞がれたならば、正攻法にでるまで。俺たちの戦いはこれからだ!
と。長くなってきたので正攻法については次回作をお楽しみに。車田先生か。まあなんだ、生殺しってヤツだね。

0