Dreamweaver TechniqueJAVA Script サンプル | CSS sample | JAVA Applet sample | Flash Sample
HTML4.0 reference | DynamicHTMLXHTML | XML sample | XSLT sample | RIKO's ASP Trial
ASP ADO リファレンス | PHP関数リファレンス | MySQL関数リファレンス

ActionScriptファイルの作成

■ ActionScriptファイルの作成

1. 「btnClass.as」という名前でActionScriptファイルを作成し、以下のように記述します。ここでは「btnClass」という独自のクラスを定義しています。クラスとは、ある特定の処理を行う関数をまとめたものを言い、オブジェクト(インスタンス)がどんなプロパティとメソッドを持っているのかを定義しています。ここでは「btn_mc」オブジェクト(インスタンス)に「触れたとき」「押したとき」「離れたとき」の内容をまとめてあります。このようにクラスを定義するものを「コンストラクタ」と呼びます。

1: class btnClass extends MovieClip {
2:    var my:MovieClip;
3:    var x:Number;
4:    var y:Number;
5:    var level:Number;
6:    var node:Array;
7:    var txt:String;
8:    var allow:MovieClip;
9:    var btn:Button;
10:    function btnClass() {
11:       my = this;
12:       this._x = my.x;
13:       this._y = my.y;
14:       txt = my.node.attributes.name;
15:       if (!node.hasChildNodes()) {
16:          this.allow._visible = false;
17:       }
18:       this.btn.onRollOver = this.onRollOverMe;
19:       this.btn.onRollOut = this.remove;
20:       this.btn.onPress = this.onPressMe;
21:    }
22:    function onRollOverMe():Void {
23:       my = _parent;
24:       if (my.node.hasChildNodes()) {
25:          var child_level:Number = my.level+1;
26:          _root.createEmptyMovieClip("menu"+child_level, child_level);
27:          _root["menu"+child_level]._x = _root["menu"+my.level].getBounds(_root).xMax;
28:          _root["menu"+child_level]._y = _root["menu"+my.level]._y+my._y;
29:          var child_x:Number = 0;
30:          var child_y:Number = 0;
31:          for (var i = 0; i<my.node.childNodes.length; i++) {
32:             var node:Array = my.node.childNodes[i];
33:             _root["menu"+child_level].attachMovie("btn_mc", "btn_mc"+i, i, {x:child_x, y:child_y, level:child_level, node:node});
34:             child_y += _root["menu"+child_level].btn_mc0._height;
35:          }
36:       }
37:    }
38:    function remove():Void {
39:       my = _parent;
40:       var gchild_level:Number = my.level+2;
41:       for (var i = gchild_level; i>1; i--) {
42:          if (_root['menu'+i].hitTest(_root._xmouse, _root._ymouse, true)) {
43:             break;
44:          } else {
45:             _root['menu'+i].removeMovieClip();
46:          }
47:       }
48:    }
49:    function onPressMe():Void {
50:       my = _parent;
51:       var cmd:Number = Number(my.node.attributes.cmd);
52:       var parm:String = String(my.node.attributes.parm);
53:       switch (cmd) {
54:          case 1 :
55:             trace(parm);
56:             break;
57:          case 2 :
58:             _root.gotoAndPlay(parm);
59:             break;
60:          default :
61:             trace("コマンドが不明です");
62:       }
63:    }
64: }

1行目

1: class btnClass extends MovieClip {

「extends MovieClip」は、「ムービークリップクラスを継承する」という意味です。

10〜21行目

10:    function btnClass() {
11:       my = this;
12:       this._x = my.x;
13:       this._y = my.y;
14:       txt = my.node.attributes.name;
15:       if (!node.hasChildNodes()) {
16:          this.allow._visible = false;
17:       }
18:       this.btn.onRollOver = this.onRollOverMe;
19:       this.btn.onRollOut = this.remove;
20:       this.btn.onPress = this.onPressMe;
21:    }

クラスと同じ名前の関数「function btnClass()」は、コンストラクタと呼ばれ、クラス内で一番最初に処理されます。このようなコンストラクタを記載しておかなかった場合、ムービーの書き出し時にFlashは同名の空のコンストラクタを作成します。
ここでは「btn_mc」の表示位置を調整し、シンボル内に作ったダイナミックテキストの変数 txt に「name」を入れ、子ノードが存在しなければ三角形を隠し、ボタンに「触れたとき」「離れたとき」「押したとき」に呼び出す関数を決めています。

22〜37行目

22:    function onRollOverMe():Void {
23:       my = _parent;
24:       if (my.node.hasChildNodes()) {
25:          var child_level:Number = my.level+1;
26:          _root.createEmptyMovieClip("menu"+child_level, child_level);
27:          _root["menu"+child_level]._x = _root["menu"+my.level].getBounds(_root).xMax;
28:          _root["menu"+child_level]._y = _root["menu"+my.level]._y+my._y;
29:          var child_x:Number = 0;
30:          var child_y:Number = 0;
31:          for (var i = 0; i<my.node.childNodes.length; i++) {
32:             var node:Array = my.node.childNodes[i];
33:             _root["menu"+child_level].attachMovie("btn_mc", "btn_mc"+i, i, {x:child_x, y:child_y, level:child_level, node:node});
34:             child_y += _root["menu"+child_level].btn_mc0._height;
35:          }
36:       }
37:    }

ボタンに触れたときの処理内容です。最初に表示されている「menu1」内のボタンに触れると「menu2」という名前で空のムービークリップを作り、その中に「btn_mc0, btn_mc1, btn_mc2, ・・・・・」という名前のボタンを配置知ることで、子メニューを作成します。子メニューのボタンにも同じ「btnClass」が割り当てられているので、必要な情報(x, y, level, node)が渡されます。

38〜48行目

38:    function remove():Void {
39:       my = _parent;
40:       var gchild_level:Number = my.level+2;
41:       for (var i = gchild_level; i>1; i--) {
42:          if (_root['menu'+i].hitTest(_root._xmouse, _root._ymouse, true)) {
43:             break;
44:          } else {
45:             _root['menu'+i].removeMovieClip();
46:          }
47:       }
48:    }

ボタンから離れたときの処理内容です。例えば「menu3」に入っている「lavel3-A」というボタンから離れた場合、その孫メニューである「menu5」から降順に消していく。このとき、「menu2」に触れていればそれをけさずに処理を終え、どこにも触れていなければ「menu1」だけを残す。

49〜64行目

49:    function onPressMe():Void {
50:       my = _parent;
51:       var cmd:Number = Number(my.node.attributes.cmd);
52:       var parm:String = String(my.node.attributes.parm);
53:       switch (cmd) {
54:          case 1 :
55:             trace(parm);
56:             break;
57:          case 2 :
58:             _root.gotoAndPlay(parm);
59:             break;
60:          default :
61:             trace("コマンドが不明です");
62:       }
63:    }
64: }

ボタンを押した時の処理内容です。XMLファイルに記述した「cmd」が1のときは「trace(parm)」が実行されて、テスト時に出力パネルに「ボタンを押しました」と表示される。命令の追加として「cmd」が2のとき「_root.gotoAndPlay(parm)」を実行し、メインのタイムラインを「parm」に指定したラベル名の位置に移動するスクリプトを記述してある。このようにすれば、ボタンごとに全く異なる処理を割り当てることができる。

2. 「MDC.htm」「MDC.swf」「MDC.xml」「btnClass.as」を同じ階層にPUTします。

<<<戻る

R HOUSE | RIKO's Trial Page | Shirley's Pettit Case | Shirley's i-box | Shirley's little box