D0504031 可変メニューに「揺れるスクリプト」を併用すると離れてしまう..?
Name KAZ
Date 2005年04月03日 (日) 15時06分
Message <前回記事>
憲ちゃん、今日は。
3月22日の「揺れながら拡大縮小するスクリプトの応用で」を参考に
メニューをロールオーバーするとコメントボックスがメニューの裏側より上から落ちる感じで出るようにコメントボックスが表示される部分にマスクを入れました。このメニューをいくつか作って「mc1.mc2...」とインスタンス名を入れます。
それをセットしたmcを作成して
onClipEvent (load) {
menu =1;
speed = 4;
}
onClipEvent (enterFrame) {
mc2._y = mc1._y+mc1._height;
mc3._y = mc2._y+mc2._height;
}
と記入しました。(No.284No295を参考に)
結果、mc1とmc2が離れてしまいます。動きはオッケーなんですが。
どうやればNo295のようにくっつける事が出来るのでしょうか?
アクションスクリプトは「揺れながら拡大縮小する・・・」ではそのままでメニューセットに上記のスクリプトを入れただけです。
宜しくお願いします。
Response 01
2005年04月04日 (月) 16時09分> 憲ちゃん 
こんにちは、KAZさん♪

”コメントボックスが表示される部分にマスクを入れました”ということは・・・
構造は■スムーズリサイズの変形でもあるということですね!
そこに、コメントMCの上下の動きを「テキストの動きを2つ入れるには?」のスクリプトを使い
■メニューが透明で背景がスライドする可変メニュー[1]の考え方で各メニューMCを関連づける!!
こういうことだと思いますので、実際に作成された構造はどうなんでしょうネ(*^.^*)

そしてセットしたMCの・・・

 onClipEvent (load) {
   menu =1;
   speed = 4;
 }

これがどういう意味をもっているのか不明なのですが・・・
ボタンにロールオーバーして、揺れるスクリプトを適用して開いたあと、
ロールアウトで、それを元の位置に向けて閉じるような仕組みを作っておられるのかどうか?
開閉の基準としてどのMCを対象にしておられて、それにインスタンス名を付けて、
適切なパスで指定されておられるのかどうか?
他にスクリプトの記載ミスがないか?などなど・・・原因はいろいろ考えられます(;^_^Aアセアセ・・

KAZさんのイメージに近づけたつもりでサンプルをつくると・・・


menu08.fla

一応こんな感じになるのかな?と思います(*^-^*

各「MENU」MCの構造は・・・



中央に「MENUボタン(縦20px)」を配置。
その下(裏)のレイヤーに「コメントMC(基準点下)」を「MENUボタン」の底辺に沿って、
Y=20から上方向に配置。
その上に「マスクレイヤー」を置いてそこには逆に、Y=20から下方向にマスク図形を配置します。
再生当初は「マスク」と「コメントMC」は重なっていないので「コメント」は全く見えません。
「コメントMC」に”comMC”というインスタンス名を付けて、
”comMC”を例の「揺れるスクリプト」で下方向(サンプルはY=120)に移動させると、
上下に揺れながら「マスク」に入り込んだ部分だけが表示されるようになる仕組みです。

「MENUボタン」のボタンアクションで・・・

 on (rollOver) { ボタンにマウスが乗れば
   _parent.menu = this._name;←ひとつ上のMC階層の変数menuに自分のインスタンス名を代入※
 }
 on (rollOut) { ボタンからマウスが外れたら
   _parent.menu = "";←ひとつ上の階層のMCの変数menuに””を代入
 }
 on (press) {
   <クリック後の処理>を記載
 }

※自分のインスタンス名とは、次にご説明する各「MENU」MCにつける”mc1”〜”mc5”のことで、
ひとつ上のMC階層とは、これらをまとめてセットにした「MENUセット」MCのことです。

ということで、シーン編集画面に戻ってこの「MENU」MCをコピー&ペーストで、
縦に5つ20px間隔で並べます。
そして上から順に、右クリック、「シンボルの複製」でシンボル名を”MENU1”〜”MENU5”まで、
修正しながら複製を作成、それぞれ編集画面にしてメニュー文字やコメント等の内容を変更します。
変更が終わったら、シーン編集画面で上から順にインスタンス名を”mc1”〜”mc5”とつけます。
その下にサンプルでは「hfm-kenchan」に相当しますが、ただの図形をムービークリップに変換、
これのインスタンス名を”mc6”としておきます。

”mc1”〜”mc6”までのMCインスタンスをすべて選択して、これをさらにムービークリップに変換、
シンボル名を「MENUセット」とします。

ステージの「MENUセット」MCに以下のスクリプトを記載。

 onClipEvent (load) { 最初に
   Max = 5;←MENUの数を変数Maxに代入
   comY = 120;←コメントMCが下にさがる目標値を変数comYに代入
   function mcMove() { ”mcMove”というメソッド名で以下の処理を一括定義
     for (i = 1; i <= Max; i++) { iをMENUの数まで1づつカウントアップしながら実行
       mcName = "mc"+i;←「MENU」MCのインスタンス名として変数mcNameに”mc”+iを代入
       if (menu == mcName) { (ボタンから指定される)変数menuが変数mcNameと同じなら
         theY= theY*0.8+(comY-this[mcName].comMC._y)/5;←揺れるスクリプトの実行
         this[mcName].comMC._y += theY;     該当のcomMCが揺れながら下にさがる
       } else { そうでない(選択されていないMENU)なら
         this[mcName].comMC._y += (20-this[mcName].comMC._y)/2;←元のY=20に戻る
       }
       this["mc"+(i+1)]._y = this[mcName]._y + this[mcName].comMC._y;
     }    ↑ひとつ下の「MENU」MCの位置のY座標を該当のMCとその中のcomMCの値で決定
   }
 }              ※以上は処理を定義しただけで、まだ実行されない。
 onClipEvent (enterFrame) { フレームレート(サンプルは1/24秒)ごとに以下を繰り返し
   mcMove();←上で定義した”mcMove”メソッドの内容を毎回実行
 }

※「for文」でiからMaxまで一気に処理しているのは、No.295でいえば・・・
各”mc1”〜”mc5”までのMCにそれぞれ「enterFrame」で個別に記載して実行するのと同じ意味です。
このようにしておくと、何か修正する際に、ここだけ修正すれば済むので、
メンテナンスも楽になります(*^.^*)

このスクリプトで分からない部分があれば、またお尋ねください(^^;
Response 02
2005年04月04日 (月) 16時53分> KAZ 
憲ちゃん、今日は。
onClipEvent (load) {
   menu =1;
   speed = 4;
 }
はNo.284を参考にしました。speed = 4;はメニューを開くスピードなので今回のは関係なかったのですね。すいません。
さっそくダウンロードしましたが、ここに表示されているswfと違う変な動きです。
すみませんが、ここに表示されているswfのflaをお願いします。
私の作ったものとどこが違うのか知りたいです。
宜しくお願いします。
Response 03
2005年04月04日 (月) 17時24分> 憲ちゃん 
申し訳ありません(;^_^Aアセアセ・・・
サウンドファイルに再配布禁止の分があるので、その部分を削除するときか、
リンク先URLを削除する際にどこか触ったようです(笑)
今、完璧にして再アップしました。
Response 04
2005年04月05日 (火) 00時47分> KAZ 
自分のものとはずいぶん違いますね。
じっくり勉強します。
忙しいところをサンプルまで作って下さって
どうもありがとうございました。

<関連記事>

このページの先頭へ