• ベストアンサー

ボタンが正常に動作しない。

いつもお世話になっております。 Actionscriptで動きを付けたムービークリップをボタンとして扱いたいのですが、クリックすると、リンク先へ飛ばなかったり、押したボタンが画面上から消えるなどの不具合が生じます。 どのようにしたら、正常にボタンとして機能してくれるのでしょうか? チェックポイントなどありましたら、ご教授ください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.3

#1,2 です。 _root の説明ですか。 _root って,Flash を開けばいつも目の前にあるすごく簡単なものですが, いざ説明となると,難しいですね。 要は,新規ドキュメントを作成したときに見える全てのものが _root です。 そして,そのときに上に表示されているタイムラインが _root のタイムラインです。 ステージ上に例えば ▲ を描いたとしても, それは _root の ▲ です。 タイムラインのフレーム数を横に増やして,レイヤー数を増やしても, それは _root のタイムラインのフレーム数を横に増やして,レイヤー数を増やしたことに他ありません。 ステージ上の ▲ をムービークリップに変換したとします。 そして,その ▲ムービークリップ を選択し, 右クリック→同じ位置で編集 を選択すれば, ▲ムービークリップ 内の編集ができます。 そのとき見えているタイムラインは _roor のタイムラインではなく, ▲ムービークリップ のタイムラインです。 ▲ムービークリップは _root とは違う単独のタイムラインを持っています。 ムービークリップは1つのワールドを持った1つの階層です。 例えば _root のタイムラインは 1フレーム しかなかったとしても, そのこととは関係なしにムービークリップ内には, 何フレームでもフレームやレイヤーを追加でき,ムービークリップ内で1つのムービーを完成させることができます。 また,ムービークリップ内にさらにムービークリップを作ることもできます。 ~~~例えば~~~~~~~~~ 蝶が羽をパタパタ動かしているだけのムービークリップを作ったとします。 その蝶を2つコピーして3つにしたとします。 そしてそれらの蝶の3つのムービークリップを お花畑の中で左右上下にモーショントゥイーン動かすという, お花畑のムービークリップを作ったとします。 これで3頭の蝶がお花畑で飛び回るムービークリップが作成できます。 このムービークリップを _root に置いて, _root に 朝→昼→夕→夜 という感じに時間を変化させるような背景を用意したとします。 すると,朝から夜までずっとお花畑で蝶が飛び続けるムービーができます。 昼に蝶は3頭いて,夕に2頭になり,夜は1頭だけ残る。 というのをスクリプトでしたいと思えば, 1つずつ蝶を消さないとなりません。 そのときにインスタンス名が必要になります。 お花畑全体のムービークリップには「hanabatake」というインスタンス名, 3頭いる蝶の1つ1つには「tyou1」「tyou2」「tyou3」というインスタンス名を付けたとします。 そして,_root に置いたボタンから, 夕になったので,蝶を1つ(tyou1)を消したい場合は, --------------------------- on (release) { this.hanabatake.tyou1._visible = false; } --------------------------- と書いたボタンをクリックすれば, 「tyou1」だけが消えます。 _root に置いたボタンに, --------------------------- on (release) { this.tyou1._visible = false; } --------------------------- と書いただけでは,「tyou1」は消えません。 もし消えたとしたらそれは,「ohanabatake」ムービークリップ内の「tyou1」ではなく, _root に置いた「tyou1」です。 「ohanabatake」の「tyou1」を消したいのであれば, this.ohanabatake や _root.ohanabatake のように, どこにいる蝶かという住所が必要です。 上の this.tyou1._visible = false; の場合,ボタンからの相対パスで「tyou1」を消しています。 このような住所を「ターゲットパス」と言います。 「ターゲットパス」 http://homepage3.nifty.com/ginga-b/MX/targetpath.html PC内やWebサイトに喩えると, ムービークリップは1つのフォルダ(階層)です。 上では,_root に置いたボタンにスクリプトを書きましたが, お花畑ムービークリップにも,スクリプトを書くことができます。 そのときのスクリプトは, --------------------------- on (release) { this.hanabatake.tyou1._visible = false; } --------------------------- ではダメです。 上で行くと 「hanabatake」ムービークリップ内の,さらに「hanabatake」ムービークリップ内の「tyou1」を消す。 と言うことになります。 「hanabatake」ムービークリップ内には「hanabatake」ムービークリップは作っていません。 お花畑ムービークリップに相対パスを使って書く場合は, --------------------------- on (release) { this.tyou1._visible = false; } --------------------------- となります。 もしくは絶対パスを使って, --------------------------- on (release) { _root.hanabatake.tyou1._visible = false; } --------------------------- でも消えます。 この絶対パスでの書きかたは,最初のボタンに書いても通用します。 以上のように,ムービークリップには階層があります。 だから,便利で融通が利くのです。 上のお花畑ムービークリップを2つコピーして3つにし, 「hanabatake1」~「hanabatake3」というインスタンス名を付けたならば, それぞれ個別に消す蝶が指定できます。 同じ「tyou1」でも, 「hanabatake1」の「tyou1」と, 「hanabatake3」の「tyou1」は別々に管理できます。 一方,ボタンには階層がありません。 独自の住所を持てないということです。 ムービークリップに書いた this は相対パスで "自分自身のムービークリップ" と言うことです。 ボタンシンボルに書いた this は相対パスで "自分自身のいるムービークリップ" と言うことです。 _root に置いたボタンシンボルに書いた this は,そのボタンがある _root を指します。 「hanabarake」に置いたボタンシンボルに書いた this は,そのボタンがある,_root.hanabatake を指します。 ここが,ムービークリップとボタンシンボルの大きな違いです。 また,_root もムービークリップの1つと考えてスクリプトを書きます。 ~~~本題ですが~~~~~~~~~  this.loadMovie("index.swf"); の loadMovie は,MovieClipクラスのloadMovieメソッドです。 原型は  MovieClip. loadMovie("URL");  です。 MoveiClip の部分に,実際にあるムービークリップのターゲットパス&インスタンス名を書けば, どこの ムービークリップ にも外部ムービーをロードすることができます。 お花畑の蝶1に「○○.swf」を表示させたいのであれば, 絶対パスで書くと ------------------------------ on (release) { _root.hanabatake.tyou1.loadMovie("○○.swf"); } ------------------------------ となります。 「hanabatake」ムービークリップに相対パスで書きたい場合は, ------------------------------ on (release) { this.tyou1.loadMovie("○○.swf"); } ------------------------------ となります。 ボタンシンボルはムービークリップではないので, ボタン自体に loadMovie はできません。 ボタンに, ------------------------------ on (release) { this.loadMovie("○○.swf"); } ------------------------------ と書いた場合,この this はボタンが置いてあるムービークリップのことになります。 _root に置いたボタンであれば,this は _root のことになるので, _root がロードしたムービーによって全て乗っ取られますよ。 ということを,#2で書いたのです。  MovieClip. loadMovie("URL"); これは,ムービークリップクラスの(ムービークリップを対象のオブジェクトとした)メソッドです。 まずこのことが重要です。 次に, Flash では _root も大きなムービークリップの1つであると考えます。 このことを考慮に入れながら, ムービークリップは階層を持つ1つのインスタンスです。 だから,ターゲットパスには注意してください。 ということになります。 >> 今回、.swf~.swf間をボタンで繋げる為に >> 上記のスクリプトを試みたわけですが つなげるだけでしたら, _root にロードしても良いと思います。 でもボタンを消したくないのであれば, ムービークリップにロードするのが普通の方法だと思います。 ムービークリップに外部ムービーをロードする場合, ムービークリップの基準点に外部ムービーの左上の端が来ます。 「インスタンスの基準点」 http://homepage3.nifty.com/ginga-b/MX/inst_refpoint.html ステージ全体に次のムービーを表示したい場合は, 透明で小さな,もしくは空(カラ)のムービークリップをステージ上の希望のレイヤーに描き, そのムービークリップをステージの左上のコーナーに配置し, 任意のインスタンス名を付けて _root.任意のインスタンス名.loadMovie("○○.swf"); でそのムービークリップに外部○○.swfがロードできます。 長いだけで,ぜんぜんまとまりのない説明だと思いますが, _root と loadMovie の説明でした。 あまり,複雑に考えることでも,勉強することでもないと思います。 ムービークリップを色々作って,制御してみたり,loadMovie などしていると, 自然に感覚でつかめてくるものだと思います。 上のも何処かに書いてあったからわかったのではなくて, いろいろ失敗しながら,試行錯誤を繰り返し,ほとんど感覚でわかったことです。

yakusokunosora
質問者

お礼

お返事が遅れまして申し訳ございません。 この度は、ご多忙の中、多くのことをご指導いただきありがとうございます。 スクリプトの中のthis.を_rootに変更したところ、正常にswfを読み込むようになりました。 本当にありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#35109
noname#35109
回答No.2

#1です。  > ――――――――――――――――――――  > on (release) {  >   this.loadMovie("index.swf");  > }  > ――――――――――――――――――――  > 上記のスクリプトは、ボタンシンボルの時には正常に動作し、 と書かれていますが, もし _root に置いたボタンに,上記スクリプトを書いた場合, this は _root になりますから, ステージ全体に, "index.swf" が読み込まれることになり, そのボタンは当然消えますよ。 ムービークリップに書いた場合も消えると思いますから,「消える」という現象に関してはどちらも変わらないと思います。 > 動きをつけたムービークリップのみ動作しません。 > (ボタンが消えたり、画面上に不具合が生じます) ボタン(ムービークリップ)が消えるようにスクリプトを書いていますから, 消えるのが普通だと思います。 むしろ,消えない方が不具合だと思いますよ。 上のスクリプトの場合, this は,ムービークリップ自身になりますから, ムービークリップ内のタイムラインはすべて "index.swf" によって乗っ取られます。 ムービークリップに描いたボタンの絵は,当然ムービークリップ内のタイムラインのステージ上に描いているはずですから, そのボタンの絵は当然消えて,"index.swf" によって乗っ取られます。 しかし,ボタンシンボルに上記スクリプトを書いた場合とは違い,  this.loadMovie("index.swf"); という,ボタンとしての機能だけは残ります。 タイムラインは全て乗っ取られてしまいますが,ムービークリップに書いたスクリプトは有効のままです。 不具合と言えば, ロードされた,"index.swf" をクリックしたときも,"index.swf" をロードしてしまう。 ということくらいだと思います。 ボタンシンボルの場合も,ムービークリップの場合も, 自分自身に他のムービーをロードするということはしないというのが,普通だと思います。 特にボタンを消したくない場合,自分自身以外に外部にロード用のムービークリップを作って, そのムービークリップにロードするのが普通ではないでしょうか。 ボタンの図柄を変えるために,自分自身にムービーをロードするということであれば, 自分自身にロードするのもあり得るかもしれませんが, その場合も,ムービークリップの "基準点" をボタン図柄の左上の角にしておかないと, ロードされたものの位置がずれます。 「動きをつけたムービークリップのみ動作しません。」 というのはよくわかりません。 ヒット領域を動く範囲全体に大きく作ってあれば, その上で何かが動き回っても,ヒットする領域は変わらないと思いますし… よくわかりません。

yakusokunosora
質問者

補足

補足です。 まず、私の中で「_root」が理解できておりませんでした。 「_root」そのものの意味と役割を知らなかったのですが_rootとはどういったものなのでしょうか。 今回、.swf~.swf間をボタンで繋げる為に上記のスクリプトを試みたわけですが、 上記のものではなくスクリプト自体を替えないと、うまくリンクとして飛んでくれないということでしょうか。 もし、上記のスクリプトから「this.」を取り除いたらスクリプトthis.の対象から外れうまく飛んでくれるということでしょうか。 まだFlashを始めたばかりのため戴いた文全てを理解できず、大変申し訳ない気持ちなのですが わからない箇所を下記に書かせて戴いても宜しいでしょうか。 >もし _root に置いたボタンに,上記スクリプトを書いた場合,  this は _root になりますから,  ステージ全体に, "index.swf" が読み込まれることになり,  そのボタンは当然消えます・・・。 >this は,ムービークリップ自身になりますから,  ムービークリップ内のタイムラインはすべて "index.swf" によって乗っ取られます。  ムービークリップに描いたボタンの絵は,当然ムービークリップ内のタイムラインのステージ上に描いているはずです・・・。 度々、捕捉等でお手数をおかけいたしまして大変申し訳有りません

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.1

チェックポイントと言うことですが, おもに次の2点がムービークリップシンボルをボタンにしたときに,注意する点だと思います。 1 ボタンで言うところの,「ヒット」のフレームを   ムービークリップ内に "塗り" で作ること。 2 ターゲットパスなどの,Flash内のパスを   間違えないように注意すること。 一応,公開されているちゃんとしたサイトでは, 次のサイトのページが参考になるかもしれません。 「ムービークリップのボタン化」 http://homepage3.nifty.com/ginga-b/MX/btnmc.html 手前味噌ですが, 上のURLより,こちらの方がシンプルでわかりやすい気はします↓。 「質問:Flashのボタン作成で、ダウンしたあと、 一度アウトしない限りオーバーに戻らないようにしたい。」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648903  ↑教えて!goo  ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1648903 他は,ボタンシンボルでボタンを作った場合と変わりませんよ。 >> クリックすると、リンク先へ飛ばなかったり、 リンク先と言うのが,Flash 内のフレームやムービークリップのことで, いつもリンク先へ飛ばないのであるなら,ターゲットパスの間違いでしょうね。 例えば, _root(メインムービーのステージ上) に置いたムービークリップで作ったボタンに ------------------------- on (release) {   gotoAndPlay(20); } ------------------------- と書いて,_root のタイムラインを フレーム20 に動かそうとしても, _root のタイムラインは,フレーム20 には進みません。 ムービークリップ内の フレーム20 に行こうとするだけです。 _root のタイムラインを 20 に進めたいのであれば,   _root.gotoAndPlay(20); もしくは,   _parent.gotoAndPlay(20); になると思います。 リンク先と言うのが,Flash 外の他のページのことで, いつもたまにリンク先へ飛ばないのであるなら,ヒットエリアの問題だと思います。 >> 押したボタンが画面上から消えるなどの不具合が生じます。 これは,理解不能です。 原因不明で,わかりません。 this._visible = false; とか, this._x = -50; とか書いてあれば, そのボタンは消えると思いますが,普通はクリックしたくらいで消えません。 取りあえず最初に書きました, ヒットエリアとターゲットパスに注意するくらいだと思います。

yakusokunosora
質問者

補足

いつもお世話になっております。 今回、質問させていただいた際に、言葉が少し不十分だったため、補足をさせていただきます。 今回、Topページに、ActionScriptで動きをつけたムービークリップを用意し、そのムービークリップに、下記のようなスクリプトを記述しました。 ―――――――――――――――――――― on (release) {   this.loadMovie("index.swf"); } ―――――――――――――――――――― 上記のスクリプトより、Topページから別に作成しておいたswfファイルをボタンを押すことによってリンクさせ開くというものです。 また、上記のスクリプトは、ボタンシンボルの時には正常に動作し、動きをつけたムービークリップのみ動作しません。(ボタンが消えたり、画面上に不具合が生じます) 以上のことより、再度、確認点・留意点等ありますでしょうか。 ご教授戴けると幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Flashでボタンをつくっているのですが、actionscriptをつ

    Flashでボタンをつくっているのですが、actionscriptをつかってボタンをクリックさせたいのですが、アクションパネルのところに「現在の選択範囲にアクションを割り当てることはできません。」と表示されてしまいます。 参考書に附属されているflaをみたところ、Actionscript1.0、2.0となっているのですが、作成しているのはActionscript3.0で作っています。 ====== on (release) { /*↑ボタンが押されて離されたら*/ _parent.gotoAndPlay("about"); /*↑「about」ラベルへ移動*/ } ====== このようなscriptをいれたいのですが、うまくいきません。 ムービークリップでボタンを作るまではできました。その後、何かが抜けているのかして上記のようなエラーがでます。 flash初心者のため、どういう風に書いて質問させていただいたらよいのかわからないのですが、参考flaと見比べたときに「シンボル定義」のなかにあるムービークリップがひとつたりませんでした。(このムービークリップは「navigation」というものですのでそれがありません。) 質問するにはあまりにも情報が少ないかもわかりませんが、何卒ご教授いただけると大変助かります。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ボタンによるムービークリップ移動

    flashmx2004/actionscript2.0です。 ボタンにrollOverすると、別の場所にあるムービークリップが所定の位置まで移動する、と言う動きをさせたいと思っています。 ムービークリップがMC1としますと、単純にボタンに MC1._x=0; MC1._y=0; と指定したらその位置に移動はしますが、これのように瞬時に移動ではなく、動きがわかる程度のスピードで動くようにしたいのです。 イメージとしましては画像の上にシャッターのように次の画像が来る形にしたいのです。 フレームをあまり使わず、可能であればボタン1個で動作させたいのですが、どうにも手詰まりです。 ご教授戴ければ幸いです。

    • ベストアンサー
    • Flash
  • FlashCS4のActionscript2.0でボタンを押して画像を

    FlashCS4のActionscript2.0でボタンを押して画像をスライド表示させる方法 ウェブサイトのトップページのヘッダー画像に スライドショーをFlashで作りたいと思っています。 動きとしては以下のURLで紹介されているようなもの。 http://www.skuare.net/test/proGlider.html 例えば、3つのボタンを A,B,C とし、 ムービークリップの画像をa,b,cとします。 ボタンBを押した時のbの動きは、 ムービークリップ”c”が表示されているときは、左からスライドして現れ ムービークリップ”a”が表示されているときは、右からスライドして現れ るようにしたいです。 お手数ですが、ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScriptでボタンをクリックしたときの動作をまとめて指定したい

    FlashMX2004で、メニューを作成しています。 ボタンの数が多いことから、いちいち一個ずつのボタンにクリックしたときの動作(getURL)を指定するのが大変なので、一番最初のフレームにActionScriptで指定したいのです。 確か、以前そういうのをやった記憶があるのですが、 とても急いでいるので調べる時間がありません。 複数のボタンが、一番上の階層にあるもの(メインメニュー)と、ムービークリップ内に配置したサブメニューと様々あります。 それぞれの指定の仕方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 浮かび上がったボタンをクリックして特定のURLに飛ばす

    ↓で質問させていただいております。  http://oshiete1.goo.ne.jp/qa2935123.html あるボタンにアクションをつけてあるムービークリップを呼び出します 出てくるそのムービークリップをクリックすると特定のURLに飛ばしたいのですが、今はカーソルがボタンを離れるとムービークリップが終了するように記述されています。 どのようにすれば「カーソルがボタンを離れてもそのムービークリップ上にロールオーバーしているときはそのムービークリックをそのままの状態」にすることができますか? また、URLに飛ばすアクションの書き方も教えていただけますでしょうか? 素人なのに少し欲張りすぎだと思っておりますが何卒ご教授いただけますようお願いいたします!

  • Flash5 「ボタン」シンボルの制御について

    ----- <状況> ------- 今、ステージ上に2つの「ボタン」があります。 一つのボタンを押すと、もう一つのボタンの大きさを150%拡大したい…。 -------------------- 「ボタン」と「ムービークリップ」の場合は、「ムービークリップ」に名前が付けられるので、 「ボタン」にActionScriptを書いて「ムービークリップ」の大きさを変更できるのですが、 これが「ボタン」と「ボタン」の場合だと、どうすればいいのか分かりません。また、「ボタン」を区別するためそれ自身に名前を付けたりできないのでしょうか? この件について、ご存知の方はどうか教えてください! お願いします!

  • 動くボタンでリンク

    FLASH MXです。 マウスポインタがオーバーすると色が変わるボタンをつくりました。 そのボタンをムービークリップとして、動きをつけました。 それをスクリーン上に配置して、リンクをはったのですが、 するとマウスポインタを置いても色がかわらなくなってしまいました。 どうしてなんでしょうか。おしえてください。 前の質問にあった、リンクで、透明ボタンの方法を試しましたが、うまくいきませんでした。

    • ベストアンサー
    • Flash
  • Flash MCのモーショントウィーン

    Flash CS5 ActionScript 3.0にて制作しています。 ムービークリップに動きをつけて色を変更するスクリプトを書いています。 ・ボタン1を押すとムービークリップの色が変わる ・ボタン2を押すと10フレーム目に飛んでモーショントウィーン それぞれ機能は正常に動くのですが、ボタン1を押した後にボタン2を押すとモーショントウィーンが動きません。 ボタン2を押した後にボタン1を押す場合は動きます。 ムービークリップのインスタンス名はtest として下記のようなスクリプトを書いています。 どなたか、お力をお貸し下さい。 よろしくお願い致します。 btn.addEventListener(MouseEvent.CLICK, black); black(event:MouseEvent):void { var color = new flash.geom.ColorTransform(0, 0, 0, 1); test.transform.colorTransform = color; } btn2.addEventListener(MouseEvent.CLICK, btn2); function btn2(event:MouseEvent):void{ gotoAndPlay("10"); }

    • ベストアンサー
    • Flash
  • ボタンを押すとMCが大きくなるFlash

    AdobeCS4、ActionScript2.0で、ボタンを押すとMCが大きくなるFlashを作ろうとしているのですが、 上手く動かないので質問させていただきます。 画面上に、ボタンと四角のムービークリップがあり、 ムービークリップの上にダイナミックテキスト(変数名point)でボタンを押した回数を表示させて、 ボタンを押すとMCが大きくなるようにしたいのです。 ボタンを押して回数を数えさせるのは、 on (press) { point = +1; } で出来るようになりました。 MCを大きくするのも、過去の質問を参考にしたら出来るようになったのですが、 この二つを合わせると動かなくなってしまいました。 また、過去の質問http://okwave.jp/qa/q4271772.html これだと、ずっと大きくなってしまうので、ある程度大きくなったら、 大きくなるのを止めたいのですが、それも上手くいきませんでした。 どうしたらいいのか、教えていただけますでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • コードからボタンを増やす

    お世話になります よろしくお願いします。 WinXP SP3 Flash8 actionscript 2.0を使用しています cnt.txtに「cnt=6」と書いていて この6という数字を取得して ムービークリップを6個作りたいのですが こういうことは可能なのでしょうか? インスタンス名は連番でできればと思うのですが・・・ Actinscriptのコードからムービークリップなどを増やすことはできないのでしょうか? 以上よろしくお願いします

    • ベストアンサー
    • Flash