あさりのみそしるダイアリー

おトク情報毎日更新!だから毎日見に来いやゴルァ!!…うっ、ごめんね(´・ω・`)

「WebEffect」でマウスをクリックするとビームが何発も飛んでいくプログラムをつくる



ひさしぶりに再開します。

前回はビームは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;
を入れた方がいいです。


なお、上記の修正は以下のプログラムファイルでは修正済みです。



今回作成したプログラムのプロジェクトはこちら。
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やブラウザで開くことができます。