• 締切済み

虫眼鏡拡大ムービーの中にボタンを配置する

現在、勉強を兼ねて以下のサイトの虫眼鏡ムービーを改造しています。 http://www.geocities.co.jp/Playtown-Domino/6340/memo/ このムービーにボタンを複数配置して、マスク部分の領域にボタンが入ってon(release)したとき 別ページにリンクさせたいのですが、_rootにボタン"hogeBtn"を置いて on(release){getURL("hoge.html");}ではリンク先が開きません。 ボタン範囲のマスクの領域外をクリックするとリンクするので、 どうやらマスクが邪魔をしているようです。 どなたかマスクの領域内でもボタンにリンクさせる方法、お分かりの方お願いします。 ※上記のスクリプトではマスクはドラッグして移動しているんですが、 rollOverでもなんでもとりあえずクリックした時にリンクする方法があればお願いします。

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

みんなの回答

noname#35109
noname#35109
回答No.1

>> _rootにボタン"hogeBtn"を置いて >> on(release){getURL("hoge.html");}では >> リンク先が開きません。 _rootにボタン"hogeBtn"を置く? 質問内容自体より,ここが最大の謎です。 _root に置いたら何の問題も起こらないと思います。 書かれているURLのサンプルで言うと, _root ではなくて, _root. upsizephoto の中にボタンを置いたのではないでしょうか。 つまり,拡大される写真のムービークリップの中です。 そうでないと,拡大や移動などの意味がなくなります。 上記の前提,つまり, _root. upsizephoto の中にボタンを置く場合として, 以下回答します。 =*= 原因・理由 =*=*=*=*=*=*=*=*=*=*= >> ボタン範囲のマスクの領域外をクリックするとリンクするので、 >> どうやらマスクが邪魔をしているようです。 その推測は,そもそも間違いです。 マスクの問題ではなくて, 「ボタン上勝ちの法則(今勝手に命名)」です。 ボタンを上下に重ねたら, 普通は上のボタンしか効かなくなるでしょう。 単にそれだけのことです。 書かれているURLのサンプルでは, マスクは,マスクとしてだけではなく, マスクをドラッグで動かすボタンになっています。 ※ココで言うボタンとは  ボタンシンボルのインスタンスという  狭義のボタンではなく,  ボタン的役割をするオブジェクトのことです。 その,ボタン機能が上(レイヤー)にあるので, 下(レイヤー)のボタンが無効になるのです。 =*= 解決策 =*=*=*=*=*=*=*=*=*=*= 解決方法は, だいたいこういうケースの場合 hitTest を使うのが, 定石手段となっています。 onハンドラを使わずにロールオーバー/ロールアウトを検出する http://www.fumiononaka.com/TechNotes/Flash/FN0308001.html 詳細は,上記URLの通りです。 上のURLの考え方を使って, この場合に当てはめて日本語でスクリプトを書くと,  マウスがクリックされた状態の時{    ボタンがマウスと重なっていた場合{      getURL("hoge.html");    }  } となります。 「マウスがクリックされた状態の時」 これを,簡単にするには,  onClipEvent (mouseDown) などを使います。 これは,ボタンシンボルのインスタンスには書けないので, ボタンはムービークリップで作ってください。 ご質問で書かれている URL のサンプルの場合, 上の写真「upsizephoto」をダブルクリックして, そのムービークリップ内の編集に入ります。 そのムービークリップにはレイヤーが1つしかないので, 写真のレイヤーより上にレイヤーを追加して2レイヤーにします。 そして上のレイヤーに, 塗りでボタンになる丸でも描いてください。 どこに描いても良いですが, 京都タワーの上の先端にでも描いたとしますか。 その塗りを選択して,ムービークリップに変換します。 そして,そのムービークリップを選択して, 下のアクションパネルに, --------------------------------------- onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { getURL("hoge.html"); } } --------------------------------------- と書けば一応出来上がりです(コピペ可)。 ボタンの  on (release) {} に当たるクリップイベントは, 普通,  onClipEvent (mouseUp) {} ですが,書かれているサンプルの場合, マスクエリア内でマウスダウンすると, マスクの中心位置が,スルリとマウスの座標に動くようにしてあるので, ボタンに逃げられてしまうため,  onClipEvent (mouseDown) {} にしています。

macosmx
質問者

補足

丁寧な解説ありがとうございます。 なるほどそういうやり方で解決できたんですね。 >_root に置いたら何の問題も起こらないと思います。 >書かれているURLのサンプルで言うと, >_root ではなくて, >_root. upsizephoto の中にボタンを置いたのではないでしょうか。 これに関しては_rootのどこにボタンを置いても何も反応なしでした。 何かやり方が間違っていたんでしょうか。 しかしボタンが重なっているのが原因なんだなと考えて、 マスクのインスタンスのアクションのdragの動作をonClipEvent(enterFrame) {}で 囲んでやることでボタンを_rootに置いても動作させることが出来ました。 とりあえず動くには動いたんですが、sassakunさんに教えていただいた方法で 組み直してみようと思います。 ありがとうございました。

関連するQ&A

  • ムービークリップ内の複数のボタンにリンクを与える

    http://www.condo.fromc.jp/flash/memo/index.html こちらの”■スライド式メニュー (2003/11/2)”を利用し、現在ホームページ用にメニューを製作しているのですが、1つのスライドに対して 複数のリンクを持たせようと思い公開されているASに以下のものを追加して動作させてみました。 階層としては全て同じなので一つだけ例に挙げますが、 スライド1(ムービークリップ)   LボタンA(リンク先A)・ボタンB(リンク先B)・ボタンC(リンク先C) といった感じです。 その中のボタンに直接onハンドラを書き込んでも反応がない為(自分が調べた限りではonハンドラが重なってると上の方が優先されるようで・・・。) 思い切ってムービークリップ内に on(Press) { this.A = getURL("リンク先A"); } on(Press) { this.B = getURL("リンク先B"); } on(Press) { this.C = getURL("リンク先C"); } と言った感じにASを追加したのですが、これですとクリックした際にリンク先上から読み込んで言ってしまい、一番下に書いてあるリンク先Cへと最終的に飛んでしまいます。 また、onClipEventで動かそうとしますとループしたりと思った動作にならなかった為悩んでいます。 ムービークリップ内にある複数のボタンに個別にリンク先を与えてうまく飛ばす方法ありますでしょうか? よろしければご指導お願いいたします。

    • ベストアンサー
    • Flash
  • swfobject:配置したflash内のボタンをクリックしても反応が無い

    お世話になります。 swfobjectで配置したflash内のボタンが、 マウスオーバーのアクションはしますがその後、クリックしてもリンク先に飛ばずに困っています。 ボタンは以下のような仕組みになっています。 ※配置したムービークリップに、以下のスクリプトを入力してボタンにしています。 onClipEvent (load) { this.stop(); flag = "0"; } on (rollOver) { flag = "1"; } on (rollOut, dragOut) { flag = "2"; } onClipEvent (enterFrame) { if (flag == "0") { this.stop(); } else if (flag == "1") { this.nextFrame(); } else if (flag == "2") { this.prevFrame(); } } on (release) { getURL("http://www.test.com"); } 静止しているボタンのような形のMCにマウスオーバーでアニメーションして(光る等)、 クリックしてリンク先に飛ぶようになっています。 ※swfobjectではなく通常の埋め込み方法では、動作確認済みです。 アニメーションに関係するスクリプトは、この問題に関係ないかとは思いますが、もし何か原因の一つであったらと思い記入致しました。 swfobjectでは、ボタンでリンクするのに何か特殊な事が必要なのでしょうか? それとも、上記スクリプトに何か原因があるのでしょうか? 何か小さな助言だけでも大変助かりますので、 ご存知の方、何卒よろしくお願いします。

  • FlashLite1.1にてボタンに当たった時、ムービークリップの再生方法

    初めて投稿します。はじめまして。。 初歩的な質問なんですが、どうか宜しくお願い致します。 FlashLite1.1にて携帯サイトを制作しています。画面を読み込み時、ボタンにはフォーカスは当たってない状態で、ムービークリップが動いてます。ボタンに当たった時、他のムービークリップを流したいのですが、うまくいきません。。 【ケンタッキー】のモバイルサイトみたくうごかしたいのですが。 携帯の場合、this,_root等、パスも書けないので困っています。 現在は、 on(rollOver,press){ gotoAndPlay(#); getURL(""); } と書いてますが、リンクはいきますが、mcが動きません。 初心者で申し訳ありません。 どなたか教えて下さい。

    • ベストアンサー
    • Flash
  • ボタンにリンクを貼っても・・・

    DreamWeaverMXと、FlashMXを使用しています。 flashでボタンを作成し、リンクを貼ったのですが、フラッシュが再生されると同時にリンク先に飛んでしまいます。 ボタンをクリックすると飛ぶようにしたいのですが、どうしたらいいでしょうか? ちなみに、リンク先のURLも合っているはずなのですが、「ページがありません」と表示されてしまいます。 ボタンへのリンクは、on (release) { getURL ("URL", "_blank"); } で貼っているので合っていると思うのですが・・・。

  • ムービークリップの中のボタンからURLを表示させたい

    flash8を使用しています。今、作成しているものは クリックして開けた箱の中にボタンが隠れていて そのボタンをさらにクリックすると あるURLが表示される・・・というflashを作成したいのですが、 この箱の中のボタンに対する下記の表記では表示されません。 on (release) { getURL("http://www.***"); } ムービークリップ(開く箱)の中の構造は up・over・release・outでフレームを区切っており、 箱のフタが閉じた状態から開くように設定しています。 ここまでの動作は問題なく出来ているのですが、 中に入れたボタンをクリックしても 表示したいURLが表示されないんです。 ちなみにこの箱のムービークリップに対する メインタイムラインのスクリプトは・・・ var box:MovieClip; box.onRollOver = openBox; box.onRollOut = closeBox; box.onRelease = breakBox; box.onReleaseOutside = closeBox; function openBox():Void { this.gotoAndPlay("over"); } function closeBox():Void { this.gotoAndPlay("out"); } function breakBox():Void { this.gotoAndPlay("release"); } というように指示しています。 試しに、この箱のムービークリップではなく、 フレームで区切ってない単純なムービークリップの中に ボタンを置いたらURLが表示されるので このフレーム区切りが反応させない原因なのでしょうか? 何か解決方法はないのでしょうか? ご教示願います。

    • ベストアンサー
    • Flash
  • Flash CS4でリンクボタンを作成中です。

    Flash CS4でリンクボタンを作成中です。 初心者で、スクリプトの意味がまだ良く分かっておらず、参考書記載の通りにアクションを書いたのですが、「コンパイルエラー」が表示され、指定したページへリンクされません。 アクションスプリクト及びコンパイルエラーは以下の通りです。 どこが悪いのか全然分かりません。どなたか至急ご教授宜しくお願いします。 ★アクションスクリプト 1  on (rollOver) { 2  this.gotoAndPlay("ON"); 3  } 4 5  on (rollOut) { 6  this.gotoAndPlay("OFF"); 7  } 8 9  on (release) { 10 getURL("http://www.~/"); 11 } ★コンパイルエラー 1087 シンタックスエラー(プログラムの末尾の後に余分な文字が見つかりました。) on (rollOver) { 以上、宜しくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップに配置したボタンを作動させるには?

    Flash初心者のものです。 現在、FLASHで簡単な地図を作成しているのですが スクリプトを記述し、オンマウスによるスライド動作を表現したムービークリップ(インスタンス名:mc_sride)の中にボタン(インスタンス名:btn_a)を配置して、そこをクリックすると 地図の座標が移動するというような動きを実現したいのですが、 なかなかうまくいきません。 メインのムービーにボタンだけを配置した場合はうまく作動するのですが、 それを前述したムービークリップの中に配置すると そのボタンがまったく作動しないのです。 マウスが乗っても反応がありません。 相対パスはきちんと記述しているのですが・・・ どうすればうまく作動するようになるのでしょうか? ちなみにmc_srideのスライド動作のスクリプトは onClipEvent (load) { var div:Number = 0.5; var move_to:Number =730 this._x = 730; } onClipEvent (enterFrame) { this._x += (move_to-this._x)*div; } on (rollOver) { this.move_to -=100 } on (rollOut) { this.move_to +=100 } になります。 ボタンをうまく機能させる方法をご存知の方がもしいらっしゃたら、お手数ですがご指南願います。

    • ベストアンサー
    • Flash
  • Flashvars getURLの書き方

    AS2の質問です。 flashvarsでhtmlからの指定でURLを引用したいと思っています。 作りたいのは画像・URLは全て外部(html)から引用した画像リンクです。 画像はマウスオーバーでアルファを変えます。 古い記憶からgetURLで指定すればよかったような気がし、 ムービークリップに指定しましたが「undefined」と表示されました。 (ボタンだと上手くいくのですが、今度はアルファがうまくきかず……) 下記のようなスクリプトを書いています。 ---------------------------------------------------- onClipEvent(load){ this._alpha=50; } on(rollOver){ _root.******._alpha=100; } on(rollOut){ _root.******._alpha=50; } on(release){ getURL(++++++); } ------------------------------------- *******がムービークリップのインスタンス名 ++++++が引数となります。 こちらは動画の最後に表示するものとして作っています。 よろしくお願いします

    • ベストアンサー
    • Flash
  • 配置したSwfファイルの下にあるボタンに触れないようにしたいのです!

    こんにちは。flashを初めてようやく1か月が過ぎた新米の僕なのですが、一つ伺わせていただきたいことがありまして、投稿させていただきました。 現在flash8でムービーを作っています。 現在作っているムービーの中で、 (1)トップ画面があり、そこにRollOverで飛べるリンクがある (2)別のところにあるボタンを押すと、トップ画面の上に別の画面が表示される というようにしてあります。その別の画面の中で、画面の下にあるRollOverに触れてしまうとリンク先に飛ばされてしまって困っています。出来ればこのボタンを無効にしたいと思っているのですが、どうすればよろしいでしょうか。 ちなみにその画面の表示は、 function showdocu() { cover.changeContent("document.swf"); } docu_btn.onRelease = showdocu; で、RollOverのボタンは function showbbs() { cover.changeContent("bbs.swf"); } bbs_btn.onRollOver = showbbs; としてあります。浅学の僕の質問にはあきれてしまうかもしれませんが、よろしくお願いいたします。

  • MCの座標の変更

    Flash のステージ上に1~5のボタン(btn01~btn05)を作成しました。 on(rollOver){ } と on(rollOut){ } のスクリプトで 5つの「btn」上にマウスが出入する度に同一フォルダー内の「face01.swf~face05.swf」がサムネールのように表示・非表示され、「btn」をクリックすると対応する「face01.html~face05.html」へリンクするように設定いたしました。 on (rollOver) { loadMovieNum("../INDEXTEST/face04.swf", 1); } on (rollOut) { unloadMovieNum(1); } on (release) { getURL("../INDEXTEST/face04.html"); } この際、on(rollOver){ } で表示されるサムネール「face04.swf」の座標がステージの一番左上部となっておりますが、私は画面内の特定の座標に表示したいと考えています。 座標の指定方法を教えていただけませんでしょうか?

    • ベストアンサー
    • Flash

専門家に質問してみよう