D0410252 プルダウンメニューの制御方法
Name ミル
Date 2004年10月25日 (月) 15時21分
Message こんにちは、はじめまして。
以下のURLの様なムービーを作成しました。

http://tiny.peewee.jp/html/pro_navi_moto.html

動作は問題ないのですが、該当するカテゴリーの1つを
あらかじめ開いて表示させる様にしたいのです。

各カテゴリーボタンMC1フレーム目に

on (release) {
this.NewY = this.A.OrigY;
this.gotoAndStop(1);
this._parent.B.NewY = this._parent.B.OrigY+this._parent.Control.AH-this._parent.Control.ButtonH;
this._parent.B.gotoAndStop(1);以下CからNまで続く
play();
}

各カテゴリーボタンMC最終フレームに

on (release) {
this._parent.B.NewY = this._parent.B.OrigY;
以下CからNまで続く
play();
}

を入れて、クリックするとカテゴリーが開くようにしてあります。
こちらを読み込んだと同時に、クリックした時と同じ動作をさせたい時はどうすれば良いのでしょうか...。

空のシンボルを作り、それに

onClipEvent (load) {
this.NewY = this.A.OrigY;
this.gotoAndStop(1);
this._parent.B.NewY = this._parent.B.OrigY+this._parent.Control.AH-this._parent.Control.ButtonH;
this._parent.B.gotoAndStop(1);以下CからNまで続く
play();
}

を入れてみたのですが、ダメでした...。

ちなみにカテゴリーボタンMCを配置したMCには
以下のスクリプトが入っています。

onClipEvent (load) {
Speed = 2;
ButtonH = (this._parent.A._xscale/93)*this._parent.A.Button._height
ButtonHB = (this._parent.A._xscale/63)*this._parent.A.Button._height
AH = this._parent.A._height;
BH = this._parent.B._height;
以下CからNまで続く
}

なおかつ各カテゴリーボタンに入れたスクリプトです。

onClipEvent (load) {
OrigY = _y;
NewY = OrigY;
}
onClipEvent (enterFrame) {
_y += ((NewY-_y)/this._parent.Control.Speed);
}

お知恵を貸して下さいませ。何卒宜しくお願い致します。
Response 01
2004年10月25日 (月) 23時42分> 憲ちゃん 
はじめまして、ミルさん♪

他人のスクリプトから構造を想像するのは、くたびれる作業ですので正確に分析していませんが・・
「空のムービークリップ」を、最初に開くカテゴリーMCの中に配置しているとすれば、
そこに記載したスクリプトのパスの問題ではないかと思います(^^;

 onClipEvent (load) {
   _parent.NewY = _parent.A.OrigY;
   _parent.gotoAndStop(1);
   _parent._parent.B.NewY = _parent._parent.B.OrigY+_parent._parent.Control.AH・・・・
   _parent._parent.B.gotoAndStop(1);以下CからNまで続く
   _parent.play();
}

「this」をこのように「_parent」におきかえるともしかしたら上手くいくかも知れません!
Response 02
2004年10月26日 (火) 00時12分> 憲ちゃん 
カテゴリー別というか「メイン」のメニューをクリックしたとき、
どのメニューがクリックされているかというのを、別の切り口で考えてみて・・・
各メインメニュー全体を見渡せる位置、つまりひとつ上の階層に、現在選択中のメニュー番号を、
例えば変数「menu」で一括管理することにすれば、スクリプトもスッキリします(*^.^*)


button30.fla

サンプルの構造は・・・
カテゴリー別メニューとして、「メインボタン」と「サブボタン」を下図のように並べ、
それぞれ別々に「MENU1」MC〜「MENU5」MCのムービークリップにします。
メインボタンだけの高さはいずれも同じ18pxで、「サブメニュー」の数がそれぞれ異なりますから、
各MCの高さは「this._height」で得られますね。
※座標計算しやすいようにボタンやMCの基準点はいずれも左上にしておきます。



これをステージ上では、レイヤーの重なり順を考慮しながら、以下のように重ねて配置します。



それをさらにひとつにまとめて「MENUセット」MCにします。

当初は各メインボタンの高さ(=18px)の間隔で配置されていますが、
「メインボタン」がクリックされたとき、該当のMCの本来の高さ(this._height)までその幅を拡大し、
各々全体にその分だけずらして移動させていきます。
このとき、いきなり「this._height」まで広げないで、その高さに向けて徐々に近づけていきます。
徐々に近づいていくその中間の値を変数「theH」ということにすると・・・

 theH += ( this.height - theH ) / 調整値;

そして「MENUセット」MCからみたそれぞれのMENU・MCのY座標は、上図の関係式になることは、
図からも明らかですね♪

そこで、スクリプトですが・・・現在どのMENUが選択されているかを管理する変数「menu」と、
拡大速度の調整値(変数speed)及び位置関係を、これら「MENU1」〜「MENU5」を包含する
「MENUセット」MCにクリップアクションとして、

 onClipEvent (load) {
   menu = 1;←※※この数字のMENU・MCが読み込んだ当初開きます。
   speed = 4;←値を大きくすればゆっくり、小さくすれば速く移動
 }
 onClipEven (enterFrame) {
   mc2._y = mc1._y + mc1.theH;
   mc3._y = mc2._y + mc2.theH;
   mc4._y = mc3._y + mc3.theH;
   mc5._y = mc4._y + mc4.theH;
   mc6._y = mc5._y + mc5.theH;
 }

このように記載しておきます。

各MENU・MCの中の「メインボタン」のボタンアクションでは、

 on (release) {
   _parent.menu = 1;←メニューにより「1」〜「5」に変更
 }

クリックされたボタンにより「MENUセット」MCで定義された変数「menu」の値が変化します。
これを利用して、各々MENU・MCのクリップアクションで・・・

 onClipEvent (load) {
   theH = closeH = 18;変数theH及び閉じているときの初期の高さcloseHに「18」を代入
 }
 onClipEvent (enterFrame) {
   if (_parent.menu == 1) { 変数menu が「1」のとき(※メニューにより「1」〜「5」に変更)
     theH += (this._height - theH)/_parent.speed;←theHを徐々に自分の高さに近づける
   } else { そうでないとき
     theH += (closeH - theH)/_parent.speed;←theHを閉じたときの高さに近づける
   }
 }

※そうでないときのスクリプトとして、「theH = closeH;」とすればミルさんに似た動きになります。

それぞれMENU・MC自身が、自分のメニュー番号と同じかどうかチェックし、同じなら拡大し、
同じでないなら縮小する(closeH = theH のときは変化しない)ということを行い、
その結果が、その上の階層の「MENUセット」MCの関係式に反映されるという仕組みです(*^.^*)

このページの先頭へ