ひさしぶりに再開します。
前回はビームは1つしか生成できませんでしたので、今回は複数のビームを発射できるようにします。
その前にデザインをちょっと変更。
スクリーンのサイズは自由に変更できます。
複数の図形オブジェクトをグループ化して1つにまとめることで、外部から画像を読み込まなくてもキャラクターを作成することができます。
さて、ここから本題。
マウスクリックイベントの内容を追加します。
ビームを複数発射できるようにしたいからと言って、ビームオブジェクトを大量に用意する必要はありません。
duplicateMovieClip("beam", newName, beamNum);
すでに作成済みのオブジェクト「beam」のコピーを作成します。第1引数にコピー元となるオブジェクト名を入力します。
作成したコピーのオブジェクト名は第2引数に指定され、ここではnewName変数の内容としています。
第3引数にはそのオブジェクトの深さを指定します。深さが小さいほど他のオブジェクトより下に、大きいほど他のオブジェクトよりも上にきます。
たとえば、オブジェクト1(深さ3)とオブジェクト2(深さ10)が重なった場合、オブジェクト1よりもオブジェクト2のほうが上に表示され、オブジェクト1はオブジェクト2の下にかくれます。
1つのビームオブジェクトをduplicateMovieClip関数により複製することで対応することができます。
それから、今回のプログラムでは、いくつもオブジェクトを作成するのはあまりよろしくないので、使用済みというか、画面外に出てしまったビームは座標のみを変更することで再利用しています。
(// すでに生成済みのビームで使用済みのものがあれば再利用する)
表示されているビームはshot()関数内で常に画面上部に移動するように座標をずらしていきます。
ビームの複製のオブジェクト名はeval()関数から文字列で呼び出しています。
eval("beam"+i)._y -= beamUp;
この場合、オブジェクト名「"beam"+i」のy座標をbeamUpだけ画面上部にずらしています。
たとえば、i = 10 であれば、"beam10"という名前のオブジェクトについて操作します。
今回のポイントは
・duplicateMovieClip
・eval
の2点ですね!
次はいよいよ敵が登場します!
ビームの応用なのでいきなり大量に出てきます。
(訂正)
プログラム中の
beam._x = _xmouse;
beam._y = _ymouse;
は消し忘れです。いらないので消してください。
それと
eval("beam"+i)._x = _xmouse; // オブジェクトbeam**のx座標をマウスのx座標にする
eval("beam"+i)._y = _ymouse; // オブジェクトbeam**のy座標をマウスのy座標にする
isShot = true;
の下に
break;
を入れた方がいいです。
(訂正)
プログラム中の
beam._x = _xmouse;
beam._y = _ymouse;
は消し忘れです。いらないので消してください。
それと
eval("beam"+i)._x = _xmouse; // オブジェクトbeam**のx座標をマウスのx座標にする
eval("beam"+i)._y = _ymouse; // オブジェクトbeam**のy座標をマウスのy座標にする
isShot = true;
の下に
break;
を入れた方がいいです。
なお、上記の修正は以下のプログラムファイルでは修正済みです。
今回作成したプログラムのプロジェクトはこちら。
http://cid-1b0a73ffbf74d345.office.live.com/self.aspx/WebEffect/onMouseMove3.gla
拡張子は「gla」です。「Windows Live SkyDrive」にアップロードしました。
直接WebEffectから開くこともできます。
実行ファイルはこちら。
http://cid-1b0a73ffbf74d345.office.live.com/self.aspx/WebEffect/onMouseMove3.swf
拡張子は「swf」です。同じく「Windows Live SkyDrive」にアップロードしました。
GOM Playerやブラウザで開くことができます。