- ベストアンサー
変数の利用方法
- 変数の利用方法についての質問です。
- CS3のAS3環境で、ボタンにマウスオーバーした時にエラーが発生します。
- 複数のボタンで同じ処理をさせたいが、変数で指定する方法が分かりません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
this を trace アクションで表示してみると分かるのですが、return function の中にある this はスクリプトを書いたタイムライン(例えばメインのタイムラインに書いた場合はメインのタイムライン)を指していません。 このため、新たに作られる関数の中では、this を使うと目的のインスタンスを指すことが難しくなります。 ActionScript 3.0 では、イベントが起きた時に addEventListener で登録しておいた関数が自動的に呼び出されます。 この時、発生したイベントに関する様々な情報を1つにまとめたものが、呼び出される関数に渡される約束になっています。 渡される情報の1つに、イベントが発生した対象(今回の件ではムービークリップ)の参照があります。例えば bot1 でイベントが発生した時は、bot1 を表す情報が含まれています。 渡される情報は、addEventListener で登録する関数の中で使うこともできます。 bot1 にカーソルを合わせた時に自分自身のタイムラインのフレームを移動したいのであれば、この情報を利用すると便利です。 ステージにムービークリップ bot1 ~ bot3 があるとします。 それぞれにカーソルを合わせた時、自分自身のフレームラベル "Over" に移動するスクリプトの一例です。 このスクリプトは、メインのタイムラインのフレームに記述してください。 (↓ 各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //- - - - - function handleRollOver( e:MouseEvent ) { //イベントが発生した対象自身のフレームに移動 e.target.gotoAndPlay( "Over" ); } //イベント処理をまとめて定義 for( var i:int = 1 ; i <=3 ; i++ ) { this[ "bot" + i ].addEventListener( MouseEvent.MOUSE_OVER , handleRollOver ); } //- - - - - イベントに関する情報はたくさんあるので、1つのオブジェクトにまとめて渡されてきます。 受け取る情報全体を表す部分が、handleRollOver 関数の仮引数である e です。 関数の中で個々の情報を取り出すには、e の中の、知りたい情報を管理している個別の変数の名前を指定します。 イベントが発生した対象の情報は” target ”という名前の変数に入っており、対象がどんな名前でも対応できるようになっています。 関数の中では同じ e.target という記述でも、bot1 でイベントが起きた時は bot1 を、bot2 の場合は bot2 のことを指しますから、ムービークリップがいくつあってもイベント処理関数は1つだけで済みます。
お礼
丁寧に教えて頂きまして、ありがとうございます。 分からないことだらけで、無我夢中でやっていましたが、 教えて頂いた内容を何度も、よむことでイベント処理の事が 少しずつ分かってきました。 教えた頂いたソースでボタンの処理も無事に成功しました。 本当にありがとうございました。