Chap04 イベント処理の基礎: 2009年10月アーカイブ

(section04-02 イベントとイベントリスナーから抜粋)

 入れ子のムービークリップのロールオーバー/ロールアウトのイベントは、クリックイベントと同じではありません。クリックイベントの場合は親ムービーにイベントリスナーを登録すれば子ムービーのインスタンスのクリックをイベントのtargetとして処理できますが、ロールオーバー/ロールアウトのイベントの場合はtargetとして処理できません。
 これに対処するために、次のサンプルで示すようにaddEventListener()の第3引数(useCaptureプロパティ)をtrueにします。すると親ムービーに設定したリスナー関数でロールオーバー/ロールアウトをした子ムービーのインスタンスをtargetとして処理できるようになり、子ムービーのインスタンスごとにイベントリスナーを登録する手間がなくなります。

[:script:]ロールオーバーした入れ子のインスタンスを拡大する
//イベントリスナーの追加
box_mc.addEventListener(MouseEvent.ROLL_OVER, onRollover, true);
box_mc.addEventListener(MouseEvent.ROLL_OUT, onRollout, true);

//ロールオーバーのリスナー関数
function onRollover(eventObj:MouseEvent):void {
	var target_mc:MovieClip=eventObj.target as MovieClip;
	target_mc.scaleX=target_mc.scaleY=3.0;
}

//ロールアウトのリスナー関数
function onRollout(eventObj:MouseEvent):void {
	var target_mc:MovieClip=eventObj.target as MovieClip;
	target_mc.scaleX=target_mc.scaleY=1.0;
}
fig4-02-09.jpg
イベントリスナーは親ムービーに設定してありますが、ロールオーバーした子ムービーのインスタンスが拡大します
swfを試す

[:note:] ROLL_OVER ROLL_OUT のイベントオブジェクトのbubblesプロパティがfalseだからです。CLICKのbubblesプロパティはtrueです。
詳しくはヘルプのイベントフローを参照してください。

(section04-02 イベントとイベントリスナーから抜粋)

 ムービークリップの中にさらにムービークリップが含まれているという入れ子のムービークリップのインスタンスの場合には、マウスイベントを受け取ったターゲットの処理に注意が必要です。
 たとえば、次のカエルの顔のムービークリップは顔の中の目が入れ子のインスタンスになっています。このムービークリップのインスタンスface_mcにクリックすると回転するイベントリスナーを追加します。

fig04-02-04.jpg
顔のムービークリップの中に目のムービークリップが入れ子で入っています。

[:script:]クリックしたtargetを回転させる
//イベントリスナーの追加
face_mc.addEventListener(MouseEvent.CLICK, onClick);

//クリックのリスナー関数
function onClick(eventObj:MouseEvent):void {
	var target_mc:MovieClip=eventObj.target as MovieClip;
	target_mc.rotation+=30;
}
 カエルの顔すなわちface_mcをクリックすると顔全体が回転します。つまり、targetはface_mcということになります。

fig04-02-05.jpg
顔をクリックすると顔全体が回転します。

 ところが、目をクリックすると目だけが回転します。目のインスタンスにはイベントリスナーを登録していないのに、クリックのtargetはface_mcではなく目のインスタンスになっています。

fig04-02-06.jpg
目をクリックすると目だけが回転します。
swfを試す

 目をクリックしても顔全体を回転させるには、targetプロパティではなくcurrentTargetプロパティを利用します。

[:script:]リスナーを追加したインスタンスを回転させる
//イベントリスナーの追加
face_mc.addEventListener(MouseEvent.CLICK, onClick);

//クリックのリスナー関数
function onClick(eventObj:MouseEvent):void {
	var target_mc:MovieClip=eventObj.currentTarget as MovieClip;
	target_mc.rotation+=30;
}
swfを試す

まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

このアーカイブについて

このページには、2009年10月以降に書かれたブログ記事のうちChap04 イベント処理の基礎カテゴリに属しているものが含まれています。

前のアーカイブはChap04 イベント処理の基礎: 2009年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ