■第1回 はじめに
■第2回 神の計画
■第3回 誰のどこに「いつ、だれの、何を、どうする」を書く
■第4回 変数を使いこなす
■第5回 Mathランダム徹底研究
■第6回 回転のメカニズム(番外編)
■第7回 正六面体の回転(番外編)

 第2回 神の計画 2004.01.17 .
 神の計画

201

T.世の開ける前(ステージに何も無い状態のとき)、神様が「人間(シンボル名)」の原型(ムービークリップシンボル)を天国(ライブラリ)に登録されました。内容は頭と胴と手足があり、2本足で立って歩くというものです。
U.この世(ステージ)に生まれでる人間(インスタンス)には、この世での身長、体重、肌の色、住む場所などという共通の属性(プロパティ)が備わり、ひとりひとりに固有の値や性質が与えられます。
V.始めに神様はご自分の計画の実現のため、天国(ライブラリ)からこの世(ステージ)に(ドラッグして)2人の人間(2つのインスタンス)を生まれさせました。
W.ひとりひとりに名前(インスタンス名)が与えられ、”太郎”と”花子”と命名(各々固有のインスタンス名を設定)されました。
X.太郎は身長174、体重65、黄色い肌で大阪に住まわせ、花子は身長160、体重80、肌は青く東京に住まわせました。(固有のインスタンス名を指定して各プロパティの初期値を設定)
Y.神様は花子(固有のインスタンス名)の体重(プロパティ)を、日ごと(フレームイベントの発生ごと)に1づつ減じるようにし(計算式による値の変更)、体重が45になれば(条件文)、太郎のそばに寄り添うよう(具体のメソッド)命じられました。
Z.また「終末の箱(ボタンシンボル名)」をこの世(ステージ)の片隅に人知れず置き(ボタンインスタンスをアルファ0%に設定)、神様の意思でそれに一撃を加えたとき(外部からボタンにクリックイベントが発生したとき)、日々の運行を終える(タイムラインの進行を停止する)よう仕組まれました。

そしてこれらをみて”よし”と(間違いないことを確認してムービーを再生)されたので、すべてがそのようになりました(アクションが実行され計画どおりにアニメが進行)。

※現実の人間世界も、このように実体の無いインスタンス(「色即是空」)なのかもしれませんね(笑)

ここで神様とは、FLASHソフトを駆使している”あなた自身”のことで、「神の計画」
とは、あなたがこれから制作しようとする作品の企画内容(設計図)のことです!

202

T〜Vの例えは、第1回の「FLASHアニメのおさらい(その2)・・・シンボルとインスタンス」の”114””115”番の内容で、W以降はこれからご説明することです。

 ムービークリップインスタンスを特定する「インスタンス名」

203

編集作業(オーサリング)中、ムービークリップインスタンスに対しそのプロパティの値を設定したり値を変更するときは、ステージで該当のインスタンスをクリック選択することで”インスタンスを特定”し、ドラッグ移動(位置座標を変更)したり、変形ツールを使って大きさを変更したり、「情報パネル」や「カラーパネル」などを使って直接その値を打ち込むことができました。
しかし、 アクションスクリプトはムービー再生中に動作するものなので、”再生中に該当のインスタンスを編集画面のステージでクリック選択する”などということはありえません。
そこで、それぞれのインスタンスに予め「固有のインスタンス名」を付けておいて、アクションスクリプトで実行するときは、その「固有のインスタンス名」を指定することで(ステージ上でのクリック選択に相当)”インスタンスを特定する”ことになっています。

※ムービークリップインスタンスを配置しても、すべてのインスタンスに名前をつけなければならないということではありません。
アクションスクリプトを適用する必要のないインスタンスや、インスタンス自身に直接アクションスクリプトを記載する場合(後日説明します)などは、省略できます。

204

インスタンスに「インスタンス名」を付ける方法は、ステージにある該当の「インスタンス」をクリック選択して・・・



FLASH5の場合、「インスタンス」パネルの”名前”欄に、「MX」の場合は、ステージの下「プロパティ」の<インスタンス名>欄に、キーボードから直接名前を打ち込みます。
「インスタンス名」は、自分で分かりやすいように任意の名前を付けてください。
※ただし、次の点に留意してください。
 @必ず半角英数文字であること。
 A使える記号は「_(アンダーバー)」のみ。(文字の途中に空白を入れることもダメ)
 B先頭の文字は「A〜Z」「a〜z」のアルファベットでなければならない。(先頭に数字や記号はダメ)
 Cアクションスクリプトとして使われている単語(予約語)をそのまま使えない。(theStopなど別の文字との併用は可)
 Dアルファベットの大文字と小文字は区別されない。 (「TAROU」
も「tarou」も同じものとみなされる)

205

■前回の「invader.fla」ファイルを開いて、ステージにある黄色の「インベーダ」インスタンスに「tarou」、青の「インベーダ」インスタンスに「hanako」という「インスタンス名」を付けてください。
インスタンス名をそれぞれ付け終わったら、一度ステージの何も無いところでクリックしすべての選択を解除してから、もう一度、黄色、青それぞれの「インベーダ」インスタンスをひとつづつクリック選択していくと、先ほど付けた「インスタンス名」が確認できると思います。
名付けた「インスタンス名」を忘れたときは、このようにして確認することができます。

206

前回、シーン編集画面で、1フレームのキーフレームを開始フレームとし、36フレームのキーフレームを最終フレームとするモーショントゥイーンをそれぞれ設定しました。
今、それぞれの「インベーダ」インスタンスにインスタンス名を付けたのは、多分1フレームのインスタンスだと思いますので、上記の方法で、今度は36フレームのインスタンスをそれぞれクリックし、その「インスタンス名」を確認してみてください。
”???”・・・名付けたはずの「インスタンス名」が表示されない!
前回の「FLASHアニメのおさらい(その2)・・・シンボルとインスタンス」の”116”番の上から4行目でご説明している理由で、1フレームと36フレームのインスタンスは別のインスタンスであり、名付けたのは1フレームのインスタンスだけだったからです。
今はこれで全然問題ありませんが、構造やアクションの内容によっては支障がでることもあります。
ひとつの事例経験として記憶の片隅にでも置いておいてください。

第1回からここまでが一応、アクションスクリプトの”コントロールの対象”であり、”主役”であるムービークリップインスタンスのお話です。


 ボタンとアクションのおさらい

207

もうひとつ、重要な役割をもつオブジェクト(部品)に「ボタン」があります。
これについての詳細は「FLASH5講座」のLesson4、「4−3ボタンの作成」及び「4−4ボタン操作によりムービーを動かす(ボタンアクション)」を参照していただくとして・・・
「ボタン」は、ムービー再生中に外部からのマウス動作に反応してムービーの流れを変えるという役割をします。
予め仕組まれたムービー内のシナリオとは別に、外部からの予測できないタイミング(神様の気まぐれ)で、その後のムービーのシナリオに変化を与えます。
例えば、ボタンの上で「マウスがクリックされたとき」、「○○する(○○のアクションスクリプトを実行する)」というようにです。
この「××されたとき」というのは、「○○する」ための”きっかけ”のことで、これを「イベント」といいます。
「イベント(動作のきっかけ)」についてはボタンに限りませんので、さらに詳しくは後日ご説明しますが、
ボタンのイベントには・・・
@「Press(プレス)」:ボタンの上で、マウスが押し込まれた(マウスダウンした)瞬間。
A「Release(リリース)
」:ボタンの上で押し込まれていたマウスが、離れた(マウスアップした)瞬間
  (=クリックされたとき)。
B「RollOver(ロールオーバー)」:ボタンの上にマウスが乗った瞬間。
C「RollOut(ロールアウト)」:ボタンの上に乗っていたマウスが、ボタンの外に出た瞬間。
などがあり、以上がその代表的なものです。

208

その「イベント(動作のきっかけ)」が実際にアクションとして使えるようにした(定義した)ものが「イベントハンドラ」というもので、書式は・・・

 on( イベント ){
    実行するアクションスクリプト
 }


というように記載します。
※これを「on()ハンドラ」と呼びますが、この名称は特に覚えなくても支障はありません。
※「定義する」という単語は、参考図書などを読まれるとよくでてきます。
普段聞きなれない単語なので”何か難しいことなのだ!”と、ここで戸惑ってしまわれる方もいらっしゃると思いますが、正確な意味は別として、「○○を定義する」とでてきたら、文脈の中で「○○が実際にアクションスクリプトの中で使えるようにすること」と読み替えれば大体意味が通ります。そして大抵はそこに示された書式どおりに記載することを指しており、それ以外に特別な何かをするようなことは普通ありません。(余談ですがご参考までに・・・)

209

■実際に、ボタンを作成して、それに「ボタンアクション」を記載してみます。
@シーン編集画面でレイヤーを追加、新しく「レイヤー3」が追加されます。
A「レイヤー1」と「レイヤー2」をロック(書込み禁止)して、「レイヤー3」の1フレームをクリック選択、ステージの適当なところに丸図形を描きます。
B丸図形が選択された状態で、メニューバー「挿入」→「シンボルに変換」で「シンボルに変換」パネルをだし、名前を「丸いボタン」、タイプを「ボタン」にして「OK」。
※この時点で、丸図形は「丸いボタン」というシンボル名で「ボタンシンボル」として「ライブラリ」に登録され、ステージに残った丸図形は「丸いボタン」ボタンインスタンスに変身します。
Cステージのボタンインスタンスを右クリック、右クリックメニューの「コピー」をクリック、ステージの中の何も無い場所で再度右クリック、右クリックメニューの「同じ位置にペースト」をクリック。
同じ位置に重なって、別の新しい「丸いボタン」ボタンインスタンスができます。
D新しいインスタンスが選択されている状態で、キーボードの矢印キーを使って左右に適当に移動して真横に配置。
Eそれぞれのボタンの上に「文字ツール」で、「STOP」と「PLAY」の文字を重ねて記載してください。
以下の図のようになると思います。



これで、アクションスクリプトを記載する前提(「ボタン」インスタンスの配置)ができました。

210

ムービー再生中に「STOP」ボタンをクリックしたら、左右に移動を繰り返していた2つの「インベーダ」がその時点で移動を停止し、「PLAY」ボタンをクリックしたら、再び移動を開始する、ということをさせてみたいと思います。
「インベーダ」が左右に移動するのは、1〜36フレームに設定したモーショントゥイーンによるもので、ムービーは再生中、アクションで何も指示していなければ、1〜36フレームを順番に進みながら永久にループを続けます。
このフレームの進行を一時的に停止(「タイムラインを停止」ともいいます)させるのが、よくご存知の「Stopアクション」で、フレームを進行(「タイムラインを進行」ともいいます)させるのが「Playアクション」です。
したがって、「STOP」ボタンがクリックされたら、「Stopアクション」を実行して進行しているタイムラインを一時停止させ、「PLAY
」ボタンがクリックされたら、「Playアクション」を実行して、一時停止していたタイムラインを再び進行させるようにすればよいということですね!
上記”208”番の書式にしたがって・・・

「STOP」と書かれた「丸いボタン」ボタンインスタンスに、

 on( release ){ ←(「STOP
」ボタンが)クリックされたら
   stop();    ←「Stopアクション」を実行=タイムラインを停止
 }

「PLAY」と書かれた「丸いボタン」ボタンインスタンスに、

 on( release ){ ←(「PLAY
」ボタンが)クリックされたら
   play();    ←「Playアクション」を実行=(停止していた)タイムラインを進行
 }

と記載します。

211

■ボタンにアクションスクリプトを記載するには、まず、これからスクリプトを記載しようとするボタンインスタンスをクリック選択し、「アクションパネル」を使って必要なアクションスクリプトを順次記載していきます。
@ステージの「STOP」と書かれた「丸いボタン」ボタンインスタンスをクリック選択してください。
※このとき、文字の真上をクリックすると文字が選択され、ボタンインスタンスが選択されませんから、文字を避けて少しずらした位置でクリックしてください。
A「アクションパネル」が出ていなければ、該当のボタンインスタンスの上で右クリック、右クリックメニューの「アクション」をクリックすると出てきます。


※上が「FLASH5」、下が「MX」のアクションパネル。
※アクションスクリプトの記載モードに「ノーマルモード」と「エキスパートモード」がありますが、慣れるまではスペルや文法間違いの少ない「ノーマルモード」がお勧めです。この講座では「ノーマルモード」でご説明します。
※左のスクリプト一覧が掲載された枠が「ツールボックスリスト」、右のスクリプトが書かれている枠を「スクリプトエリア」といいます。
※「スクリプトエリア」に記載される内容が、実際に実行されるアクションスクリプトです。

Bツールボックスリストから「stop」を選び、それをダブルクリックすると、「ボタン」インスタンスの場合、スクリプトエリアに自動的に上記”208”番でお示しした書式(イベントハンドラ付)で記載されます。
※右( )内の「イベント」は、初期値は「release(クリック)」になります。他のイベントを選択したいときは、イベントの文字部分をクリックすれば、イベント一覧がチェックボックス付で表示されますので、必要なイベントにチェック(複数選択可)を入れて変更又は追加することができます。
(注)「FLASH5」の場合、「stop」などのアクションは「基本アクション」という区分と「アクション」という区分の両方にありますが、「基本アクション」内のアクションは使わないで「アクション」区分内のものを使うようにしてください。
C同様に「PLAY」と書かれた「丸いボタン」ボタンインスタンスをクリック選択し、アクションパネルのツールボックスリストの「play」をダブルクリックします。
これで、それぞれのボタンインスタンスに上記”210”番のアクションスクリプトが実際に記載されたことになります。
Dメニューバー「制御」→「ムービープレビュー」をクリックして、動作を確認してください。
予定どおりの動作が出来れば成功です。
※アクションスクリプトの動作確認は、必ず「ムービープレビュー」で確認します。「制御」→「再生」では確認できません。

212

ここまでは先の「FLASH5講座」でもご説明している内容です。
「STOP」ボタンをクリックしたら、「インベーダ」の横移動は停止しましたが、足の開閉は止まりませんでしたね!
これは、前回”111”番でご説明してる「ムービークリップは、”ムービーの中の独立したムービー”」ですから、それが配置されているタイムラインの動き(停止・進行)にかかわらず、独立して動作するものだからです。
ではどうすれば「インベーダ」の足の開閉も同時に停止させられるでしょうか?

213

「インベーダ」の足の開閉は、「インベーダ」ムービークリップ内の1〜4フレームのタイムラインで、「開いた図形」と「閉じた図形」を交互にループさせることで行っていました。
「STOP」ボタンがクリックされたら、同時に「インベーダ」ムービークリップのタイムラインも停止するよう、アクションスクリプトで書き加えればよいのですね。
その際に、タイムラインを停止させるべきムービークリップインスタンスを特定する必要があるため、上記”203”番でいう「固有のインスタンス名」を指定することになるのです。

「tarou」インスタンスのタイムラインを停止するときは、

 tarou.stop();

「hanako」インスタンスのタイムラインを停止するときは、

 hanako.stop();

「固有のインスタンス名」と目的のアクションの間を「.(ドット)」で繋ぎます。
それを、上記アクションスクリプトのどこにどのように記載するかといえば・・・

 on( release ){ ←ボタンがクリックされたら
   stop();       ←タイムラインを停止
   tarou.stop();   ←(同時に)「tarou」という名前のムービークリップインスタンスのタイムラインを停止
   hanako.stop();  ←(同時に)「hanako」という名前のムービークリップインスタンスのタイムラインを停止
 }

と、ただ並べて書き加えるだけのことです。

214

■「アクションパネル」でアクションスクリプトを追加挿入するときは、


このようにします。
※スクリプトエリアのスクリプトをクリック反転し、ツールボックスエリアの任意のアクションス等をクリックすると、反転させたスクリプトの下に追加挿入されます。
※「evaluate」は、オールマイティでスクリプトエリアには「;(セミコロン=スクリプトの区切り)」だけが表示され、上の「式」欄にキーボードから入力することで、どんなアクションでもインスタンス名でもプロパティでも自由に記載できます。
ツールボックスリストから目的のアクションを見つけるのが面倒なときは、この方法で直接記載しても構いません。
ここではインスタンス名と同時に記載するため「evaluate」を使いました。

215

これで、再生中に「STOP」ボタンをクリックすると、横移動と共に「インベーダ」の足の開閉も停止します。
ただし、 このままでは次に「PLAY」ボタンをクリックしても、横移動は再開されますが、足は止まったままです。
そこで、「PLAY」ボタンも・・・

 on( release ){ ←ボタンがクリックされたら
   play();       ←タイムラインを進行
   tarou.play();   ←(同時に)「tarou」という名前のムービークリップインスタンスのタイムラインを進行
   hanako.play();  ←(同時に)「hanako」という名前のムービークリップインスタンスのタイムラインを進行
 }

としておかなければいけません。
上記”214”番の手順で追記することもできますが、スクリプトエリアでは、スクリプトの「コピー&ペースト」もできます。
違いは、各インスタンスの「stop()」と「play()」だけですから・・・
次のようにそこだけを「コピー&ペースト」します。


※Aのドラッグ操作は、慣れるまで少し”コツ”が必要かもしれません。失敗したら、一旦、ドラッグしたい部分以外を反転しておいて、同じ操作を何度もやり直してください。
この程度のスクリプトなら、最初から記載してもそれほど手間ではありませんが、長いスクリプトで同じようなことを色々な場所に記載する必要があるときにはとても便利なテクニックです。
※他にもアクションパネルを使った様々な記載(削除)方法があります。参考図書等で研究し、自分のやり易い方法をみつけてください!!

216

以上をメニューバー「制御」→「ムービープレビュー」で確認して、以下のように動作すれば成功です。



invader.fla←ここまでのサンプル制作ファイルです。右クリックして「対象をファイルに保存」でダウンロードできます。

 アクションスクリプトの世界では、「ボタン」はムービークリップの”付属品”!

217

「ボタン」はこのようにアクションスクリプトの世界に無くてはならない重要な役割をになっており、ムービークリップ同様「ライブラリ」に「シンボル」として登録され、ステージ上では「インスタンス」として存在します。
そして「インスタンス」である以上、ステージでの大きさ、位置座標、透明度、色、回転角度など固有の「プロパティの値」をもっています。
したがって編集作業中に、個々にドラッグ移動(位置座標プロパティを変更)させたり、モーショントゥイーンを適用したり、「情報パネル」や「カラーパネル」などで直接数値を記載して「プロパティの値」を変更できたりと、その点では全くムービークリップインスタンスと同じです。
しかし、それが「アクションスクリプトの世界」においては、ムービークリップインスタンスと異なり、ボタンインスタンスには次のような制約があります。
@アクションスクリプトを使って直接、ボタンインスタンスの「プロパティの値」を取得したり変更したりすることができません。
Aムービークリップインスタンスのように「インスタンス名」を付けることができません。
 (=ボタンインスタンスには”人格”が認められていない)
※「MX」バージョンのアクションスクリプトでは、ボタン機能が拡張され、いずれも可能になりましたが依然他の制約もあります。先に基本を抑えていないと混乱しますので、この講座では「FLASH5」バージョンに従い「できない」としておきます。

218

具体事例は後日になりますが・・・こうした制約があるため、
アクションスクリプトを使って、ボタンインスタンスの位置を移動させようとするときは、これをムービークリップに包み込み、包んだムービークリップインスタンスの位置座標を変更することで、ムービークリップインスタンスもろとも移動させるということをします。
つまり、
@ボタンインスタンスは、それが配置されているムービークリップインスタンスに依存する存在(ムービークリップインスタンスの付属品)であり、
Aアクションスクリプトがターゲット(対象)とするのは、あくまでムービークリップインスタンスです。

219

人間世界がひとりひとりの個人もしくは組織を中心に関係性を保つ世界であるように、アクションスクリプトの世界は、固有のインスタンス名(人格)をもつことのできるムービークリップインスタンスもしくは(法人組織ともいえる)ムービークリップインスタンスだけで構成する階層構造を中心に相互の関係を規定する世界なのです。
コンピュータが人間世界に与えるインパクトが如何に大きな存在であっても、あくまで個人もしくは組織の中で所有され使用される道具でしかないように、ボタンインスタンスの役割が如何に大きくても、それが配置されたムービークリップインスタンスの所有物のひとつという位置づけにしか過ぎません。
道具であるコンピュータに入力するデータやそこから得られるデータは、コンピュータのものではなく、コンピュータを所有する個人又は組織のものであるように、ボタンに記載されたアクションスクリプトや変数(後日説明)などは、すべてそれを包含するムービークリップインスタンスに属します。
※この部分は、今は多分難解かもしれませんが、ご自分でアクションスクリプトを使った作品を幾つか制作されたあとで読み返してみてください。

220

第2回の最後に、宿題をひとつ!!
上記”213”番、「STOP」と書かれた「丸いボタン」ボタンインスタンスのアクションスクリプトをみていただくと・・・

 on( release ){ ←ボタンがクリックされたら
   stop();       ←タイムラインを停止
   tarou.stop();   ←(同時に)「tarou」という名前のムービークリップインスタンスのタイムラインを停止
   hanako.stop();  ←(同時に)「hanako」という名前のムービークリップインスタンスのタイムラインを停止
 }

とありました。
「tarou.stop();」や「hanako.stop();」では、「tarou」の、「hanako」のというように、「だれの」という「固有のインスタンス名」を指定して、タイムラインの停止を命じています。
しかし、最初の「stop();」では、「だれの」が記載されず、いきなり”タイムラインを停止”と命じています。
この省略された「だれ」というのはだれのことでしょうか?
そして、これらの者に対して”停止命令”を発している”主”は、一体だれでしょうか?


第2回 神の計画 戻る このページの先頭へ 次へ

質問掲示板 過去記事 サンプル作品集 FLASH5講座 ACTION SCRIPT講座 リンク 憲ちゃんのHP FLASH制作代行 トップページ

トップページ