以前、ActionScript2.0を使ってプルダウンメニューを作りました。
ところが時代はあっという間にActionScript3.0に。
そこで、こいつを、ActionScript3.0に移植してみることにしました。 

【PR】リファレンス本買いました。
ActionScript3.0 ポケットリファレンス (POCKET REFERENCE)ActionScript3.0 ポケットリファレンス (POCKET REFERENCE)
著者:馬場 ぎんが
販売元:技術評論社
発売日:2008-08-29
おすすめ度:3.0
レビューを見る


その前に、ActionScript2.0でのプルダウンメニューのおさらい。

まず、プルダウン用のムービークリップを作成。
それと、マウスオーバー用の透明のムービークリップも作成。
さらに、もととなるボタンを作成。

マウスオーバー用のムービークリップにマウスが乗っている間は、プルダウン用のムービークリップを通常再生、乗っていない間は逆再生。 
それを、hitTestメソッドおよび_totalframesプロパティで制御する。

といった流れのプログラム。
ActionScript2.0の時はスクリプトがいろんなところに分散しちゃっていましたが、ActionScript3.0になってまとめてひとつのフレームに書くことができるようになりました。

スクリプトを書く場所はプルダウンメニューのアニメーションをひとまとめにしたムービークリップの最初のフレームです。
今回は「pulldown」というムービークリップを作ったのでその最初のフレームに書きます。
なお、「pulldown」にはメニューが下まで行った状態のアニメーションを作っておきます。 
no title

準備ができたところでスクリプトを紹介します。
 1 : this.stop();
 2 : var nMove:int = 0;
 3 : this.addEventListener(Event.ENTER_FRAME,moving);
 4 : function moving(e:Event):void {
 5 :  if (d_mouse.hitTestPoint(stage.mouseX,stage.mouseY,true)) {
 6 :   nMove = 1;
 7 :  } else {
 8 :   nMove = -1;
 9 :  }
10 :  var nNextFrame
:int = this.currentFrame+nMove;
11 :  if (1<=nNextFrame && nNextFrame<=this.totalFrames) {
12 :   this.gotoAndStop(nNextFrame);
13 :  } else {
14 :   nMove = 0;
15 :  }
16 : }
行頭の数字は分かりやすいように入れたもので実際は書く必要はありません。

以下解説
1 : まずはムービーをとめる。
2 : 「nMove」に整数値として「0」を代入する。
3 : 「addEventListener」でAS2.0の「onClipEvent (enterFrame)」と同等の処理(フレームが変わるごとに関数を実行)をさせる。
4 : 「addEventListener」で実行させる関数を設定。以下、その関数。
5 : もし、マウスがムービークリップ(d_mouse)に重なっていたら、(マウスオーバー用のムービークリップのインスタンス名を「d_mouse」としていることが前提)
6 : 「nMove」を「1」にする。
7 : マウスがムービークリップ(d_mouse)に重なっていなければ、
8 : 「nMove」を「-1」にする。
10 : 「nNextFrame」に「currentFrame(現在表示されているフレーム番号)」+「nMove」を代入する。
11 : 「nNextFrame」がアニメーションのフレーム数を超えたり、マイナス値になったりしないかぎり、
12 : 「nNextFrame」で指定されたフレーム番号に飛ぶ。
13 : 「nNextFrame」がアニメーションのフレーム数を超えたり、マイナス値になった場合は、
14 : 「nMove」を「0」にしてアニメーションを止める。
以上。

2.0の時との変更点は以下のとおり、
  • 「onClipEvent (enterFrame)」を「addEventListener(Event.ENTER_FRAME,関数名)」に。
  • 「hitTest」が「hitTestPoint」に。
  • 「_currentframe」が「currentFrame」 に。
  • 「_xmouse」「_xmouse」がそれぞれ「mouseX」「mouseY」に。
  • 「_root」、「_parent」も使えない。(それぞれ「root」、「parent」に)
その他もろもろ。
なんだかんだいってかなり変わってますね。

FLASHでプルダウンメニュー(ポップアップメニュー) スクリプト編

AS2.0以前との違い(ActionScript3.0勉強中! #1)
ビルトインクラスとは(ActionScript3.0勉強中! #2)