D0601072 SUIT COMPANY風(No.305)カスタマイズ
Name ヨシノ サクラ
Date 2006年01月07日 (土) 22時08分
Message はじめまして、とても親切な説明をしてくれているサイトに出会い感動しています。
http://flash.obi.ne.jp/ のGAMEのページ(右上にボタンがあります)
のようなFLASHを求めています。
それぞれのMCが奥から手前に楕円に回転しているように見えて
マウスをクリックすると目的のSWF(ページ?)が出てくる。

でも、この憲さんのSUIT COMPANY風のFLASHを拝見させていただいたら私の希望により近いもので、そしてもう少し叶えていただければうれしいと思ったので投稿させていただきました。

SUIT COMPANY風FLAで、
最初に出てくるMC1〜MC40をGAMEのページのように奥から手前に楕円に回転させることはできるでしょうか?
で、手前に来たMCをクリックすると回転は止まってクリックできる。左2つ右2つに出てくるMCもクリックすると真ん中に流れる。

NO.152のサークルメニューも参考にしましたがあれはひとつのMCをいくつも見せる方法をとっているのでその辺に違いがあるとわかり、ちょっと違うかなぁと思いました。

何か応用ができるのではと思いましたがactionscriptはまだまだ初心者で何もわからないのが本音です。

どうかどうか憲さんの力を貸してください。よろしくお願いします。
Response 01
2006年01月08日 (日) 15時16分> 憲ちゃん 
はじめまして、ヨシノ サクラさん♪

サンプルとしては、こんな感じになるのだと思います。


circle.zip

全体の仕組みは、「circle_top.swf」をまず再生させて、右下の「MENU」ボタンで、
その中の読込用MC(中身空:インスタンス名「mc」)に外部SWFとして、
「circle_menu.swf」を読み込んでいます。
「MENU」ボタンのボタンアクション・・・

 on (press) {
   mc.loadMovie("circle_menu.swf"); ←インスタンスmcにcircle_menu.swfを読み込む
 }

「circle_menu.swf」がご質問のメインである楕円軌道のメニューです。
各画像(MC1@〜MC8G)の中にボタンが仕込んであり、
そのボタンで該当の外部SWF、「circle1.swf」〜「circle8.swf」を、
同じく「circle_top.swf」の読込用MCに読み込むようにしています。
各MC内のボタンの例えば「@」内のボタンアクションは・・・

 on (press) {
   _root.mc.loadMovie("circle1.swf"); ←_root(この場合「circle_top.swf」を指す)の
 }                      インスタンスmcに「circle.swf」を読み込む

そして、「circle_menu.swf」ですが、各MCが楕円軌道を描くしくみは・・・
このサイトのActionScript講座の■第6回 回転のメカニズム(番外編)を参照してください。
そのうえで、flaファイルをみていただくと、
シーン編集画面に、中に各MCを包含した「基準」MCを配置しています。
このクリップアクションは以下のとおり。

 onClipEvent (load) {
   R = 170; ←回転半径:値が大きいほど楕円が大きい
   henpei = 0.3; ←扁平率:1が正円、値が小さいほど楕円が薄くなる
   minS = 60; ←最奥に行ったときの縮小率(%)と透明度
   maxY = Math.sin(90*Math.PI/180)*R*henpei; ※触らないこと
 }
 onClipEvent (enterFrame) {
   speed = this._xmouse/30; ←「30」は回転速度:値が大きいほどゆっくり
 }

「基準」MCをダブルクリックしてシンボル編集画面にすると、
MC1からMC8までのMCが配置していますが、
これらは「基準」MCの基準点を中心に回転するようになっていますから、
当初はどこに置いてもかまいません。できればステージの外の見えないところがいいです。
それぞれのクリップアクションは・・・・

 onClipEvent (load) {
   kakudo = 0; ←異なるのは、この最初の角度の値のみ
 }
 onClipEvent (enterFrame) { 以下は、共通です(※触らないこと)
   theRadian = kakudo*Math.PI/180;
   this._x = Math.cos(theRadian)*_parent.R;
   this._y = Math.sin(theRadian)*_parent.R*_parent.henpei;
   yy = 100+(this._y-_parent.maxY)*(_parent.minS-100)/-(_parent.maxY*2);
   this._alpha = this._xscale = this._yscale = yy;
   this.swapDepths(yy);
   kakudo += _parent.speed;
 }

各MCの角度の初期値の設定のしかたですが・・・
360度を、配置するMCの枚数で割り算します。この場合8枚ですから360÷8=45です。
1枚目を0として以降45づつ値を大きくして設定します。0.45,90,135…315

各MCに画像を入れる場合は、それぞれの文字レイヤーを削除して、
BGレイヤーの図形と差替えてください。

なお、マウスの動きで縦横に回転するメニューにする場合は、
■3D回転の簡単なサンプルとスクリプト組立ての手法等、ここのボールの代わりに
これにメニューを適用すればできそうですね(*^-^*)
Response 02
2006年01月08日 (日) 16時19分> ヨシノ サクラ 
憲さん 早速のご回答ありがとうございます。
そしてわかりやすい説明をありがとうございます。
助かります。
> 各MCの角度の初期値の設定のしかたですが・・・
> 360度を、配置するMCの枚数で割り算します。
> この場合8枚ですから360÷8=45です。

こんなことすらわからないのですから。
でも説明していただくと「なるほど〜」って感じですね。
枚数を増やしたい場合は8を置き換えればいいですね。
(当たり前ですね 笑)
ここから先はトライしてみます。
また行き詰ったら相談させていただきます。
ありがとうございました。
Response 03
2006年01月08日 (日) 16時51分> 憲ちゃん 
枚数を増減したときは、回転半径や扁平率なども調整して
バランスを図る必要があるかもしれません(^^)

このページの先頭へ