• 締切済み

格納式の動くメニューとヒット領域判定について

ロゴをさわると格納されていたメニューがモーションを伴いながらでて、そのまま消えずに維持、一定以上左のエリアにいってしまうとメニューが消えるメニューを作りたいと思っています。 http://fashion.dior.com/dior.html イメージとしてはこちらのどれかリンクを選んでいただいて各コンテンツを表示させるメニューをクリックした時の動きが近いです。 格納→維持→エリア外にいくと消えるしくみまではなんとか作れたのですが、不思議なことにメニューが現れるときにモーションをともなわず、最後のフレームだけが再生されるようになってしまいました。 なお、ロゴには下記のスクリプトをつけました。 ヒットテストにしていないのはその後も条件をつけるためにはヒットテストだとできない?かなと思ったからです。 onClipEvent (mouseMove) { if (this._parent._xmouse>749.6 && this._parent._xmouse<966.6 && this._parent._ymouse<228.6 && this._parent._ymouse>28.6) { this._parent.menu.gotoAndPlay(2); } else if (this._parent._xmouse<698.9) { this._parent.menu.gotoAndStop(1); } else { this._parent.menu.gotoAndStop(7); } } 表示させるメニューのムービークリップ(menu)には onClipEvent (mouseMove) { if (this._parent._xmouse>698.9) { this.gotoAndStop(7); } else if (this._parent._xmouse<698.9) { this.gotoAndStop(1); } } と書きました。 かなり無理矢理なスクリプトだと思いますがご教授お願いします。! ちなみに制作環境はflashMX2004です。

  • Flash
  • 回答数1
  • ありがとう数2

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

下記回答の前半は,問題点ばかりを指摘する物だと思います。 ご了承ください。 ロゴに書かれているスクリプトですが,実際に領域を図示すると下のようになります。   698.9 749.6  966.6  1 ┃ 7 ┃ 7 ┃ 7 ━━╋━━╋━━╋━━ 28.6  1 ┃ 7 ┃ 2 ┃ 7 ━━╋━━╋━━╋━━ 228.6  1 ┃ 7 ┃ 7 ┃ 7 図がいびつになっていると思います。その点はお詫びします。 各マス目の中の数字は gotoAndPlay(?); の?に入っている数です。 一方,表示させるメニューのムービークリップのスクリプトを上の図に照らし合わせると,   698.9 749.6  966.6  1 ┃ 7 ┃ 7 ┃ 7 ━━╋━━╋━━╋━━ 28.6  1 ┃ 7 ┃ 7 ┃ 7 ━━╋━━╋━━╋━━ 228.6  1 ┃ 7 ┃ 7 ┃ 7 となります。 onClipEvent (mouseMove) で両方が矛盾した数になっているので, 変な動きになるのは当たり前です。 なぜ,メニューのムービークリップにスクリプトを書かれたのか,意味がわかりません。 少なくとも,メニューのムービークリップのスクリプトを無くさなければ,おかしくなります。 次に,ロゴに書かれているスクリプトだけを残した場合ですが, onClipEvent (mouseMove) で  this._parent.menu.gotoAndPlay(2); をするように書かれています。 これでは,マウスが動くたびに, _parent.menu は gotoAndPlay(2); をするので, 結局 _parent.menu.gotoAndStop(2); と変わりないことになります。 変わりないどころか,動くたびにフレーム2へgotoするので,尋常ではない動きになります。 _parent.menu.gotoAndStop(2); と書いた方がまだましです。 onClipEvent (mouseMove) で領域外に出ると, _parent.menu.gotoAndStop(1); する部分は,面白い良いアイデアだと思いました。 参考になるアイデアだと思います。 この部分だけを残し,後は,普通に上の図 2 の領域にボタンを用意して, on (rollOver) { this.menu.gotoAndPlay(1); } もしくは on (rollOver) { _parent.menu.gotoAndPlay(1); } と書かれる方が良いのではないでしょうか。 パスはボタンを置く場所によって変わるので,こちらでは判断できません。 そして,menu のフレーム7には stop(); を書いておく。 それの方がシンプルだと思います。 また,編集の都合により,ボタンの位置を変えたときも,スクリプトを編集する必要もなくなります。

apollongerZ
質問者

お礼

お返事が遅くなってすみません。 回答ありがとうございました。 結局ロゴムービークリップ内2フレームにメニューのムービークリップを配置。シーンに配置したロゴのムービークリップにヒットテストを加えたら解決しました。(領域内にはいったら2フレーム目を再生、領域外ならただロゴだけ出ている1フレーム目を再生) ちなみに、もし一番最初だけは何もしないでもメニューが動きをともないながら出て、マウスが一度領域内に入って出るまでは出っぱなしにするにはどうしたらいいかわかったら教えていただけますか?

関連するQ&A

  • FLASH ロールオーバーでプルダウンメニュー

    FLASHを勉強中3週目です。 アイコンにマウス、(マウスオーバー)を置くと、ロールオーバーでプルダウンメニューが出るようにし、そのメニューからそれぞれのURLにリンクようなサイトを考えています。 下記のChapter11 メニュー・フォーム:11-01 ロールオーバーでプルダウンメニューを表示を参考にしています。 http://book.mycom.co.jp/support/e5/actionscript10/ 画像を作成しするところまでなんとか出来ましたが、スクリプトがわかりません。 上記のサイトでは onClipEvent (load) { this.Stop(); } onClipEvent (enterFrame) { hitTop = this.hitTest(_root._xmouse, _root._ymouse, true); if (hitTop) { this.gotoAndStop("on"); } else { this.gotoAndStop("off"); } } と書かれていますが、urlにリンクをするまでの説明がありません。 初心者用のFLASHのマニュアルを2冊ほど買って勉強していますが、上記のようなスクリプトが載っていないので、WEBで調べながら勉強をしています。 プルダウンメニューのスクリプトで、リンクまでを説明しているサイトがあれば、ご教授ください。 どうぞよろしくお願いします。

  • Flash マウスの位置で速さの変わるスクロールメニュー

    Flashでスクロールメニューを作成したいのですが、うまくいきません。 ボタンを羅列しムービークリップにし、 onClipEvent (load) { Min = -80*15; speed = 20; } onClipEvent (enterFrame) { if (_parent.mask.hitTest(_root._xmouse,_root._ymouse,0)) { this._x -= _parent.mask._xmouse/speed; if (this._x >0) { this._x += Min; } else if (this._x < Min) { this._x -= Min ; } } } 上記のスプリクトを記述することで動かすことには成功しました。 しかし上記スプリクトでは、ドキュメントサイズ内では、メニューにマウスオーバーしないと制止してしまいます。 http://www.sophia-eternal.com/ 上記サイトの様に、読み込んだ時から常にゆっくりスクロールし、 マウスオーバーした時にのみ動きの速さを変えるにはどのようなスプリクトを追加すればよろしいでしょうか? メニューのみのFlashファイルを作成し、HTMLで組み立てれば早いのですが、 デザイン上、ページ全体を1つのFlashファイルで作成するしかありません。 メニューが常にスクロールしていて、マウスオーバーした時にのみ動きの速さが変わる様にしたいのです。 宜しくお願い致します。

  • FlashのActionScript詳しい方お願いします

    Flashで波紋が広がっていくようなムービーのスクリプトなのですが、うまく行きません。 スクリプトが間違っているのだと思うのですが、一応本を参考に同じように入力したつもりですのでどこが間違っているのかが分かりません。 デバックしたら下のようなメッセージが出るのですが、「;」をどこかに入れたらいいのでしょうか? 『 シーン = シーン 1, レイヤー = mouse, フレーム = 1 : 行 9:';' が必要です。 onClipEvnet(mouseMove) { 』 ----------------------------------------- 以下が記述したスクリプトです。 onClipEvent(load){ if(_name== "mc"){ max=10;//複製する個数 for(i=0; i<max; i++){ this.duplicateMovieClip(i,100+i);//複製 } } } onClipEvnet(mouseMove) { if(_name=="0"){//一つ目のmcはマウスの座標とする _x=_parent._xmouse; _y=_parent._ymouse; }else{//それ以降は自分の名前から-1引いたインスタンス名の座標を取得する _x=_parent[int(_name)-1]._x; _y=_parent[int(_name)-1]._y; } updateAfterEvent(); }

  • マウスを近づけるとオブジェクトが拡大するメニューなのですが・・・

    アクションスクリプトのサンプルソースは以下です。 (関係がありそうな箇所だけ) サンプルでは、横に並べているメニューなのですが 私は縦にやってみたくて・・・ しかし、このソースのままだとどうしても プレビューすると「ななめ」になってしまうのです。 どこをどう改造すればいいのでしょうか? } onClipEvent (enterFrame) { //三平方の定理を利用してマウスからの距離を求める mx = _parent._xmouse; my = _parent._ymouse; ox = this._x; oy = this._y; sx = (ox - mx)*(ox - mx); sy = (oy - my)*(oy - my); s = Math.sqrt(sx + sy); //距離が50以下の時に拡大 if(s<=100){ this._xscale = scl + (100-s)*1.5; this._yscale = scl + (100-s)*1.5; }else{ this._xscale = scl; this._yscale = scl; } 初歩的な事で申し訳ありませんが よろしくお願いします。

    • ベストアンサー
    • Flash
  • マウス 追従 範囲外

    マウスを追いかけるMCを以下のように設定しましたが、 MCが動いている範囲外にマウスがいるときは追いかけるのを やめにしたい場合どのように記述すればよろしいでしょうか。  onClipEvent (mouseMove) { if (_root._xmouse >左 && _root._xmouse <右) { this._x = _root._xmouse; } if (_root._ymouse >上&& _root._ymouse <下) { this._y = _root._ymouse; } } 範囲外にマウスがいるときは定位置にmcを表示させるか、 表示を消したいです。 ちなみにmcが動く範囲の指定方法はネット上から探してきました。 別の方法でもっと適した記述があれば教えてください。

  • FlashMXアクションスクリプトの記述で分からないのですが…

     現在FlashMXのアクションスクリプトを勉強中で購入した書籍に、マウスカーソルを動かすとカーソルに着いていき波紋が広がるというのがあるのですが、マウスカーソルがステージ上からなくなっても波紋が残ってしまいます。この波紋を残さないようにする記述方法をどなたか教えて下さい。WindowsXP環境です。 onClipEvent (load) { if (_name == "mc") { _visible=false; max = 10; //複製する個数 for (i=0; i<max; i++) { this.duplicateMovieClip(i, 100+i);//複製 } } } onClipEvent (mouseMove) { if (_name == "0") {//一つ目のmcはマウスの座標とする _x = _parent._xmouse; _y = _parent._ymouse; } else {//それ以後は自分の名前から-1引いたインスタンス名の座標を取得する _x = _parent[int(_name)-1]._x; _y = _parent[int(_name)-1]._y; } updateAfterEvent(); } と記述されています。インスタンスmcはシェイプトゥイーンで、円が徐々に大きくなり、消えていくアニメーションを設定しています。

  • 良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

    ■例文: ---------------------------------------------------------------- onClipEvent (enterFrame) { if ( this.hitTest(_root.char1)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char2)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char3)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char4)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char5)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char6)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char7)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char8)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char9)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char10)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char11)) { _parent.nextFrame(); } } ---------------------------------------------------------------- 上記は、_root.char1 から_root.char11までインタンス名をつけたムービークリップとのヒット確認をするアクションスクリプトです。 こういう動作をしたい場合。 for文を駆使する等で、ソースを短くまとめる方法はありませんでしょうか。 いい案がありましたら、是非ご教授の程宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • 移動範囲を指定したい

    マウスを追いかけるMC1の追いかける範囲を指定したいのですがうまくいきません; 細かい指定としては↓ (1)画面の下1/5ぐらいのMC2の中にはMC1は入れない (2)マウスがMC2の中にある時はMC1はy座標は変化なし x座標はマウスを追いかける(つまり、横にしか動かない) (3)マウスがMC2から出てきたら、再びMC1はマウスを追いかける 現状としては ------------------------------------------- onClipEvent (enterFrame) { if (this.hitTest(_root.ki.kusa)){ _x += (_parent._xmouse-_x)*0.1; this._y += 0; }else{ _x += (_parent._xmouse-_x)*0.1; _y += (_parent._ymouse-_y)*0.1; } } ------------------------------------------- これでは、マウスがMC2から出てきた時に、MC1がMC2から離れないという様になってしまうのですがどうすればいいでしょうか??

  • AS2をAS3にしたい

    AS2で書かれたスクリプトの一部があります。下記をAS3にしたいのですが。 ちなみに、mcはインスタンス名です。  onClipEvent (load) {      pointX = 10;     pointY = 20;  }  onClipEvent (mouseMove) {       _root.mc._x = _root._xmouse + pointX;       _root.mc._y = _root._ymouse + pointY;     }

    • ベストアンサー
    • Flash

専門家に質問してみよう