〜〜したときに〜〜

onClipEventイベントハンドラ


AS講座初級編ラストの第09回です。
今回のテーマは「〜〜したときに〜〜」。
あれ?第02回でやらなかった?と思った人は優秀。
今回はその親戚のようなものです。
何が違うかといえば、onイベントハンドラは
マウスの入力とかの外部からの入力に反応するものでしたが、
こちらはどちらかというと、内部的なものが多いです。

と言っても分かりづらいと思うので、例を見てみましょう。
ちなみに、今回はダン☆おにでプレイ中の背景のON/OFFを
オプションから設定する方法もやりますよ。

では、今回もまずソースダウンロードをお願いします。

今回使うソースをダウンロード



さて、内容にonClipEventイベントハンドラと書いてありますが、
これをどうやって使うかはなんとなくわかるのではないかと思います。
onイベントハンドラの時とほとんど一緒ですしね。

onイベントハンドラと違う点は2つ。
1つは、onClipEventは、Clipと付くだけあって、MCにしか書けません。
ボタン化した画像やテキストにも、もちろんアクションの<スクリプト>にも
これを書くことはできません。

もう1つは( )の中に書く条件が全然違うということ。
とはいえ、onClipEventイベントハンドラの条件の中で、
よく見かけるのはせいぜい2つだけです。


なので、今回はその2つに絞ってやってみましょう。

まず1つめは、load
書く形はonイベントハンドラと同じですから、
onClipEvent(load){ }
という形で書きます。
これが何をするASかというと、loadという単語で分かるかもしれませんが、
そのMCがSWF上に登場した瞬間に実行されます。

使い道は多種多様です。
例えば、今までなんども苦し紛れの手段をとってきた、
最初に1フレーム目で止まった状態にしておくのも、
onClipEvent(load){this.stop();}
で済んでしまいます。
他にも、いきなりMCの途中から再生したい場合も、
onClipEvent(load){this.gotoAndPlay("ラベル");}
で済んでしまいます。
あと、得点なんかも
onClipEvent(load){_root.score=0;}
で初期化できますね。

え?これだけじゃあ、ありがたみがない?
じゃあもっとありがたい例を出しましょう。
それは、設定の遠隔操作。
遠隔操作といっても、距離的な遠隔ではなく、時間的な遠隔です。

何かボタンがあったとして、それをクリックするたびに
その時の背景を出したり消したりすることはもうみなさんはできるでしょう。

では、ボタンでON/OFFを決めておいて、別フレームでの背景のON/OFFを設定するのは?
具体的にはこういうことです。






最初に出るのがオプション画面、
おにぎりがおいてあるのがゲームプレイ画面だと思ってください。

オプション画面から、別フレームの背景のON/OFFが
設定できているのがおわかりでしょうか?

今回はこういうのを作ってみたいと思います。
09_00.pflを開いてください。
一応、実際のソースを改造する場合と同じだろうと思われるような
スタート位置にしてあります。
最初の1フレームは、プレビュー時に変な挙動しないための
予備の1フレームなので気にしないでください。
で、タイトル画面は今は不要なので省いて、
2フレーム目がオプション画面に相当する場所だと思ってください。
実際にはここにいろんなオプションが並んでます。
ここに背景って項目を追加するわけですね。
そして右下の三角が、ゲームを始めるボタンに相当してます。

で、おにぎりがおいてあるのが、ゲーム画面を簡略化したものだと思ってください。
ここに背景を置きたいわけです。
左下の矢印が、ゲーム終了して結果画面見てタイトルにもどって
オプション画面にもう1回入るのを簡略化したボタンです。
ここまで大丈夫でしょうか?
大丈夫じゃない場合は、掲示板ででも私をつかまえて質問してください。

で、今からこれを改造したいと思います。 やりたいことは2つ。
・おにぎりのフレームにON/OFF可能な背景をおく
・その背景のON/OFFをオプション画面で設定できるようにする

もっと具体的に言いましょう。
・オプション画面に、ONならOFF、OFFならONに切り替えるボタンを置く
・背景を置いて、そのON/OFFを、onClipEvent(load){ }で読み取って、実際にON/OFFする



余談ですが、こういう複数の箇所をいじるとき、
どっちから作るかというのは非常に大事です。
うっかり変な方から作ると、無駄に大変な思いをすることになります。

では、どっちから作ればいいか?
それは、その片方だけいじった状態で
ある程度動作チェックができる方から
、です。
今回の場合は、先に背景をおいた場合、
ON/OFFの設定画面をまだつけてないわけですから、
本当にON/OFF可能な背景になっているか、チェックできません。
一方、オプション画面の方は、
とりあえずON/OFFの表示はできるので、
そのチェックだけで十分かは別として、
とりあえずある程度のチェックはできそうです。
だから今回は、オプション画面の方から作りましょう。

まず、ボタンの用意からですね。
これはソースによっても変わるでしょうが、
他のオプションのボタンをよく見て理解した上で、
真似して作ればいいでしょう。

が、ここでは、最もシンプルであろう方法で1から作ってみますね。

まず、ID:0003に、とりあえず青い丸があるだけのMCを用意しておきました。
これをボタンに使いましょう。
オプション画面の適当なところに配置します。
新しいものを配置する時には必ず、
深度をいくつにすればいいのかと、
消えて欲しいときにちゃんと消えるようにすることを
忘れないようにしてくださいね。
そしてもう1つ、ON/OFFを表示するためのテキストを
そのボタンの横に置かなければなりません。
これも他のオプションの表示テキストを複製して
変数名をちょっと変えるだけなので、
今回もID:0006に、テキストも一応用意しておきました。
他のを複製して変数名を_root.bgに自分で書き換えたと思ってください。
ではこれも右ペインのオプションのところに配置しましょう。

これで下準備完了です。
あとは、ボタンを押すたびに、ON/OFFの表示を切り替えればいいだけです。
第07回でif文をやったみなさんならもう自分でかけますよね。
自分で書いて、動作チェックしてみてください。








on(release){
	if(_root.bg=="ON"){
		_root.bg="OFF";
	}else{
		_root.bg="ON";
	}
}
誤答の一例です。 この7行か、それに相当するものは
みなさんわりとパッと書けたのではないでしょうか。
が、それで動作をチェックすると、
最初に何も表示されないことに気づいたのではないでしょうか。

そう、クリックしたときONならOFF、OFFならON、
じゃあクリックする前は・・・?
ということですね。
こういう、「いくつかの選択肢から選ぶ」場合は、
必ず、最初には何が選ばれているのかを指定しましょう。
それを指定するには、ボタンが表示された瞬間に
自動的にどれかを選ぶようにすればいいわけで
もちろんonClipEvent(load){ }の出番です。
{ }の中にONを選ぶASを書いておけば、最初からONになるわけですね。
ということで、正解の一例です。
on(release){
	if(_root.bg=="ON"){
		_root.bg="OFF";
	}else{
		_root.bg="ON";
	}
}
-
onClipEvent(load){
	_root.bg="ON";
}
これと全く一緒じゃなきゃ不正解ってわけではないのでご注意。








できましたかね?
ON/OFF表示切り替えができたら、いよいよ背景の方です。
プレイ画面に背景をどーんと・・・
・・・置きたいところですが、ちょっと待ってください。
背景をそのまま画像として置いた場合、どうやってOFFするんでしょう?
ということで、ON/OFFするための置き方というものを考えなければなりません。
ちょっと考えてみてください。





方法は大きく分けて2つあります。
1つは、背景MCに、何もないフレームと背景画像のあるフレームを作って、
設定により表示させておくフレーム数を切り替える方法。
もう1つは、やっぱりMCに入れておいて、
ムービークリッププロパティでなんとかする方法。

ここでは、応用が利くであろう前者の方法でやってみたいと思います。
まず、ON用フレームとOFF用フレームを作ったMCを用意します。
が、言葉で言っても分かりにくいと思うので、
ここだけはこっちで用意しました。
ID:0102がそれです。

1フレームにOFFというラベルをつけて、いきなり停止。
(実は停止は本当は必要ないんですけどね)
当然このフレームで止めておけば、このMCには何も表示されません。
2フレーム目には今度はONのラベルを置いて、
背景にしたい画像(今回はめんどくさいのでテキストで代用)をおき、停止。
こっちでとめれば、そのMCには背景画像が表示されっぱなしです。
背景をよく使う人でON/OFFをつけたい人なら、
この形式をまるまる覚えちゃっても損はしないかもしれません。


で、これを置けば、MCのフレームを指定するだけで、
背景のON/OFFができてしまうわけです。
このMCが登場した時にフレーム数を指定するのは最初に紹介しましたね。
もちろんonClipEvent(load){ }の中にgotoAndStop()やgotoAndPlay()を置くだけ。 とは言っても、オプションでどっちを選んだか、
つまり_root.bgの中身が何かによって
表示させるフレームを切り替えたいわけですから、if文も使って
このMCが登場した時に、_root.bgの中身が"ON"ならONというラベルに、
"OFF"ならOFFというラベルに移動して停止

と書くことになります。
もう第09回ですから、みなさんもう自分で書けますよね。

あとは動作チェックして、無事に背景がちゃんとON/OFFできてたら
改造完了です。おつかれさまでした。
できてなかった場合は、自分の書いたASにミスがないかよーく確認してください。
if()の中、==にするべきところ、=になってたりしませんか?

ちなみに、他にも、OFFで遊んで戻ってきた時には初期設定がOFFに、とか、
ON/OFFの切り替えボタンも乗ったら色が変わるようにとか、
いろいろ追加したさっきのSWFのソースが09_01.pflです。
パッと見複雑そうに見えるこのソースも、
いままでこの講座でやった内容しか使ってないんですよ?


前半はずっとTrainingしながらの説明な感じだったので、
ここでのTrainingは省略。

とりあえず、onClipEvent(load){ }は
このMCが登場した時に{ }内を実行するASで、
何かの初期化をする時と、事前に選んだ設定を読み込むときに使うものだ
と覚えておけばいいと思います。

















Training


内容









以上、AS講座第09回でした。
この辺にコメント。








PlusOne:タイトル


内容




戻る   掲示板へ