if文による条件分岐を学ぼう!
attachMovieでシンボルを生成する
次にクリックした時に波紋が現れる動作をスクリプトで設定します。今回は、イベントハンドラメソッドの「onMouseUp」を使います。
前回まではボタンに対して「onRelease」を行っていましたが、今回は何も無いポイントからインスタンスを生成するので、「マウスボタンを押して離した時」に動作する「onMouseUp」が適任になります。
まず、「attachMovie」の解説をします。attachMovieはリンゲージ(識別子)名がついたシンボルからインスタンスを動的に生成するメソッドです。
記述方法は以下になります。
attachMovie("リンゲージ名", "新しく生成されるインスタンス名", ムービークリップの深度);
今回のattachMovieの引数は、リンゲージ名「"bubble"」、新しく生成されるインスタンス名に「"mc"+depth」としました。最後の深度は「depth」です。
では、深度の解説をします。Flashのムービークリップには、あらかじめ深度というレイヤーが設定されます。この深度の設定でどちらのインスタンスが上にくるかどうかの順番が決まります。通常、手動でタイムラインに設定されたインスタンスは深度-1以下の値が自動的に割り当てられ、今回のように動的に配置されるインスタンスには+1以上の深度が割り当てられます。
初期値として変数名「depth」に深度0を代入しました。そしてonMouseUpでマウスを離す度に、深度の値が1つずつ増えるように「depth += 1」と記述しています。この記述を行うことで、1回目のクリックで生成した波紋は深度+1、2回目のクリックで生成すると深度+2とインスタンスを上に重ねていくことになります。
再びattachMovieの引数に戻って、新しく生成されるインスタンス名に「"mc"+depth」としたのは、クリックごとの波紋のインスタンス名を変える必要があるからです。仮にこのインスタンス名を「"mc"」とだけしてしまうと、1回目の波紋が消える前に、2回目のクリックで、インスタンス名が同じになります。この動作では1回目の波紋と、2回目の波紋が同じインスタンスと認識され、1回目の波紋が最大値になる前に消去されてしまいます(リスト6)。
さらにマウスアップの場所と、波紋の生成場所を一致させる命令文を記述します。
this["mc"+depth]._x = _xmouse;
this["mc"+depth]._y = _ymouse;
attachMovieでインスタンス名をつける際の注意点
新しく生成されたインスタンス名「"mc"+depth」のX座標に、ユーザーのマウスのX座標を代入します。これでマウスアップの場所と波紋の生成場所が一致しました。
ここでのポイントは["mc"+depth]です。インスタンス名に文字列や変数名を入れる場合、[ ]で囲みます。この囲まれた部分を、インスタンス名として解釈します。注意点は記述が「this」から続いていますが、[の前に.(ドットシンタックス)がつかないことです。
今回は、これまで学んだ応用と新しく解説した「if文」、「attachMovie」を組み合わせて、動的(ダイナミック)なムービー作成しました。最終回は、さらにこれまでの応用に、「forループ」というプログラミングの繰り返し処理を組み合わせて、印象的なムービー作成を実践していきます。