• ベストアンサー

FlashのButtonコンポーネントについて

こんにちは、初質問です。 FlashのButtonコンポーネントをステージに配置し、ActionScriptを書いたのですが、プレビューでスクリプトが機能しません。 Buttonコンポーネントに書いたスクリプトは以下の通りです。 on(press){  this.gotoAndPlay(20); } このボタンを押すことによって別のタイムラインに移動したいのですが・・・ 何しろ全くのFlash初心者ですので、どうすればButtonコンポーネントを使ってタイムラインをコントロールできるのでしょうか? どなたかご教授願います。

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

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

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

コンポーネントとは、外観やビヘイビアを変更するためのパラメータを持つムービークリップです。 ムービークリップは階層を持ちます。 this.gotoAndPlay(20); の this の指す物は階層です。 したがってこの場合 「この階層(ムービークリップ)のタイムラインをフレーム20に進めなさい。」 という意味になります。 一方,ムービーのタイムラインは, このボタンコンポーネントから見て親などの階層になります。 したがって,相対パスを使って, ----------------------------------- on (release) { this._parent.gotoAndPlay(20); } ----------------------------------- と書くか,絶対パスを使って, ----------------------------------- on (release) { _root.gotoAndPlay(20); } ----------------------------------- と書くと動作します。 しかし,一般的にコンポーネント自体に ActionScript を書くということは, 私はあまり見たことがありません。 Buttonコンポーネント にインスタンス名を付けて, 例えば,「myButton」というインスタンス名を付け, その,「myButton」が存在するフレームの空白キーフレームに, ----------------------------------- _root.myButton.onRelease = function() { _root.gotoAndPlay(20); }; ----------------------------------- と書くのが一般的かもしれません。 Flashドキュメンテーション 「コンポーネントについて」 http://livedocs.macromedia.com/flash/8_jp/main/00002931.html 「Button コンポーネント」 http://livedocs.macromedia.com/flash/8_jp/main/00003113.html 「ターゲットパス」 http://homepage3.nifty.com/ginga-b/MX/targetpath.html 一応,「ターゲットパス」の参考URLを書きましたが, ターゲットパスは,あまり考えなくても, アクションパネルの「ターゲットパスを挿入」ボタンから, 選択して自動挿入することもできます。 「ターゲットパスを挿入」ボタンは, 銃の照準のようなマークのボタンです。 おそらくターゲットをねらい打ちするという意味でそういう形をしているのでしょう。

bbuunn
質問者

お礼

sassakunさん ありがとうございます!! 早速やってみますっ

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

お使いの Flash のバージョンが書かれていませんので、とりあえず Flash MX 2004 および Flash 8 として回答します。 #1の方と一部重複しますが、ご容赦ください。 まず、コンポーネントとは編集可能なパラメータを持つ”ムービークリップ”です。 Flash に付属のコンポーネントはパラメータの他に制御用のスクリプトも組み込まれていて、独特の機能を持っています。いわばムービークリップを拡張したものです。 ムービークリップを拡張したものである以上は本質はムービークリップですから、基本的にはムービークリップで使えるイベントやスクリプトは全て利用できます。 しかし、中には使うとコンポーネントが誤動作を起こしたり、コンポーネントとして正常に機能しなくなるスクリプトがあります。 一般的には、マウス操作やキー入力を検出するイベント( press ・ release ・ rollOver / Out ・ keyPress など)や、外部からファイルを読み込む loadMovie 等の使用は避けた方が無難です。 コンポーネントの内部ではこれらのスクリプトを利用して様々な動作を実現していることが多いので、ユーザーが勝手に書き換えると処理が置き換えられてしまい、コンポーネントの動作に支障をきたす場合があります。 (まあ、Button コンポーネントで単にフレームを移動するだけなら press や release を使っても問題は起こりませんが、コンポーネントの用法からすると推奨される方法ではありません) その代わり、大抵のコンポーネントではそれに代わる独特のイベントや命令(メソッドといいます)が用意されています。 Button コンポーネントでは、release に相当するイベントである” click ”というイベントがあります。 Button コンポーネントを使うなら、正式には  on(click)  {   /*ここに、クリックした時の動作を書く*/  } という書き方になります。 もう1つ、コンポーネントのインスタンスにではなくタイムラインに書く書式もあります。 ”リスナーオブジェクト”という、イベントの情報を代理で受け取るオブジェクト(変数のようなもの)を登録して処理する方法ですが、今回は割愛させていただきます。 Flash のテクニカルノートに簡単な作例がありますので、よろしければご参照ください。  ・ Flash テクニカルノート: Button コンポーネントを使用したサンプル   http://www.adobe.com/jp/support/flash/ts/documents/fl0346.html ******************************** ActionScript では、インスタンスやタイムライン、変数・関数には全て、持ち主がいると考えます。 インスタンスやタイムラインを操作したい時、変数の中身を見たり書き換えたり、関数を呼び出したい時には、それらが誰のものになっているかを正確に指定する決まりになっています。 インスタンス等の持ち主の指定を”ターゲットパス”といいます。 ターゲットパスを間違えてもエラーにはなりませんが、スクリプトが正常に動かなくなります。 Aさんが持っているものを借りようとしてBさんに話しかけても、意味がありませんよね。それと同じことです。 ターゲットパスは面倒な概念に見えますが、この考え方のおかげで、同じシンボルから作られたインスタンスが同名の変数・関数などを持っていたとしても、別のものとして区別がつき個別に利用できるようになっているのです。 ムービーを作る時に使うタイムライン(メインのタイムライン)やステージに配置したインスタンスは、通常は _root というムービークリップの持ち物です。 Button コンポーネントのインスタンスから見ると _root は他人ですから、このタイムラインを操作するには持ち主である _root を指定しなければなりません。 従って、Button コンポーネントのインスタンスからメインのタイムラインを移動するスクリプトは  _root.gotoAndPlay( 20 ); となります。 インスタンスに直接スクリプトを書く時は、何が起きた時にスクリプトを実行するかを合わせて指定します。 Button コンポーネントでは、先述の通り、クリックした時にスクリプトを実行させるには on(click) と合わせて書きます。 つまり、ステージにある Button コンポーネントをクリックした時にメインのタイムラインのフレーム 20 から再生するスクリプトは、次のようになります。 このスクリプトは Button コンポーネントのインスタンスに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  on(click)  {   _root.gotoAndPlay( 20 );  } なお、ターゲットパスにはいろいろな書き方があります。 今回は詳しくは触れませんが、_root.gotoAndPlay ではなく  this._parent.gotoAndPlay( 20 ); や、this を省略して  _parent.gotoAndPlay( 20 ); と書くこともできます。 _root から書く書式を”絶対パス”といいます。「どこの誰々が持っている○○」と持ち主を厳密に指定する、まさに絶対的な指定になります。 this や _parent で書く書式は”相対パス”といいます。「私の親が持っている○○」「私の○○」というように、ある基準から見た相対的な表現で、”私”が誰のことを指しているかによって指す対象が変わります。この柔軟性が、相対パスの利点でも難しい点でもあります。 ターゲットパスは ActionScript の大切な概念ですので、しっかり研究してください。 ------------------------------------------------------------------- 単にフレームを移動するだけのボタンなら、コンポーネントなど使わずボタンシンボルで自作してみてはいかがでしょう。 扱いも単純ですし、ボタンシンボルは Flash の基本中の基本で勉強にもなります。 基本のボタンシンボル1つでも、先ほどのターゲットパスや this のクセ、ボタンとムービークリップの違い・特性など、いろいろなことを学習できます。 入門書や解説サイトでも、コンポーネントの Button よりもボタンシンボルの作成方法やスクリプトの書き方を先に取り上げているはずです。 ちなみに、今回の on(click) は” Button コンポーネント”の制御スクリプトです。 ”ボタンシンボル”では使えませんのでご注意ください。 Flash MX 以降( MX ・ MX 2004 ・ Flash 8 )からは、コンポーネントという、ムービーで使える便利な部品が付いてくるようになりました。 Button コンポーネントは自作するよりも高機能で便利で、ついつい飛びついてしまいがちですが、入門書で扱っているボタンシンボルとは全く違うものです。 Button コンポーネントに限らず他のコンポーネントも最初から使おうとしないで、Flash や ActionScript に慣れてきてから触れた方が、よく分かるしヘルプを見ながら応用できるようになると思いますよ。

bbuunn
質問者

お礼

DPEさん 丁寧なご説明ありがとうございます。 いろいろ勘違いや間違った考え方をしていたみたいです。 ありがとうございました☆

関連するQ&A

  • FlashのActionScriptについて。

    ActionScriptについて、質問があります。 例えば, on (press){ _root.A.gotoAndPlay("5") } とシンボルに書いて動かします。 さらにシンボルの中にある、別のシンボル(たとえてBとします。)をうごかそうと更に、次のようにかきます。 on(press){ _root.A.B.gotoAndPlay("3") } フレームナンバーはなんでもいいのですが、 どうしてもシンボルBが言う事を聞いてくれません。 なにか間違いがあるのでしょうか? どうかFlashに詳しい方教えてください!!

  • flash actionscriptとタイムライン

    flash CS4 Xpでの開発環境です。 メインのタイムラインとムービークリップ自身が持つタイムラインの二つのラインがあります。メインのタイムラインは5fで構成されており、1Fずつキーフレームが設置してあります。 メインのタイムライン上にアクションスクリプト 1F目 var flag=0; stop(); if(flag=1){gotoAndPlay(2)} と書かれています。 ムービークリップはメインのタイムライン上の1F目に設置してあり,ムービークリップのタイムラインは60Fで構成されていて、60F目にactionscript flag=1; と書いています。 ムービークリップの動きがすべて終わってから、メインのタイムラインを2F目に進めたいのですが、現状ではすぐに2F目にうつってしまうような感じになってしまっています。 どこがいけないのでしょうか? もし知っている方がいましたらご教授いただきたいです。 よろしくお願いします。

  • Flash ActionScript3.0ボタン.

    このまえはじめたばかりの初心者です。FlashCS4です。 Flash ActionScript3.0ボタンでフレームに飛ぶ方法がわかりません・・ AS3.0ではボタンにスクリプトが書けないので メインタイムラインの最初のフレームにスクリプトを書くのですよね? アドレスに飛ぶ方法は this.stop(); // イベントを設定 stage.addEventListener( MouseEvent.CLICK , onClick ); // 画面クリックをするとonClickが動作するイベント function onClick ( event:MouseEvent ) { // URLRequestを設定 var url:URLRequest = new URLRequest( "http://www.google.co.jp" ); // 実際にページに飛ぶ navigateToURL( url ); } こちらであっていますでしょうか・・? これをいじってフレームに飛ぼうとおもうのですが、うまくいきません・・ どなたか、flashサイトでもわかりやすいところがあれば ご伝授おねがいいたします。

    • 締切済み
    • Mac
  • Flash ActionScript3.0ボタン.

    このまえはじめたばかりの初心者です。FlashCS4です。 Flash ActionScript3.0ボタンでフレームに飛ぶ方法がわかりません・・ AS3.0ではボタンにスクリプトが書けないので メインタイムラインの最初のフレームにスクリプトを書くのですよね? アドレスに飛ぶ方法は this.stop(); // イベントを設定 stage.addEventListener( MouseEvent.CLICK , onClick ); // 画面クリックをするとonClickが動作するイベント function onClick ( event:MouseEvent ) { // URLRequestを設定 var url:URLRequest = new URLRequest( "http://www.google.co.jp" ); // 実際にページに飛ぶ navigateToURL( url ); } こちらであっていますでしょうか・・? これを多少いじって次のフレームに飛ばそうとおもうのですが、うまくいきません・・ どなたか、flashサイトでも、わかりやすいところがあれば ご伝授お願いします。

  • Flash cs4 ランダム再生

    Flash初心者です。 やりたいことはホームページ上でアニメーションを再生させる際に、複数パターンのアニメーションをページをリロードするたびにランダムに切り替えるということです。 Flashにてアニメーションのタイムラインを複数パターンつくり、ランダム再生をActionScriptで制御するものを作成したいと思います。 アニメーションのタイムラインを作成しムービーシンボルとしたものを複数作成し、それをシーン1のタイムラインにて各フレームに配置して、1フレーム目にActionScriptにてgotoAndStop(ランダムフレームの記述?);とすればいいのかなと思っているのですが、正しいでしょうか? 現状ではアニメーションのムービーシンボルは必要なパターンだけ作成しました。 シーン1のタイムラインに配置まではしたのですが、ActionScriptの記述が素人なものでさっぱりわかりません。 どなたか教えていただけませんか? 自分なりにやってみたのですが、ランダム関数(?)以前にgotoAndStop()すら思うようにいきませんでした。 Flashはcs4を使用しております。ActionScript3.0のプロジェクトにして添付画像のように1フレーム目に gotoAndStop(10); としてみたのですが、パブリッシュしたswf ファイルは真っ白のまま何も動いてくれません。 gotoAndstop(10); としてみたらstopせずにタイムラインを再生しているようで、各アニメーションの最初のフレームだけが切り替わるものになってしまいました。 ともにコンパイルエラー 1180:未定義である可能性が高いメソッドgotoAndstopの呼び出しです といわれます。 ActionScriptが2.0と3.0とどちらがいいのかもわかってない状態ですが、ご教授願います。

    • ベストアンサー
    • Flash
  • FLASHで、ラベル名を取得するには?

    今現在ムービーがいるところ(タイムラインでも、ラベル名でもかまいません)を取得するActionScriptのようなものはありますか? 1|2|3 ●   ● ●→どちらもthis.stop(); の時に、ボタンを押すと、今は1にいる、今は3にいる、ということがわかるようにしたいのです。 FLASH5です。

    • ベストアンサー
    • Flash
  • Flash CS4 + ActionScript 3.0 で swf

    Flash CS4 + ActionScript 3.0 で swf ファイルを作成しました。 メインのタイムラインの 1 フレーム目に ActionScript で stop(); を 指定したのですが、swf 単体で再生(Adobe Flash Player 10で再生)して 確認したところでは問題なく 1 フレーム目で停止しますが、 swf を HTML に配置してブラウザで確認したところ、 ロード時にはメインのタイムラインがすべて再生されてしまいます。 これについての対処法はあるのでしょうか? 自分なりの調べて見つけた方法としては、 ↓こんな感じだったのですが、根本解決ではない気がするので、  何か良い方法があれば、教えてください。よろしくお願いします。 ・外部ファイルを読み込むだけの swf を作って、  実際に再生したい swf を UILoader に読み込む ・全部ムービークリップに入れてしまって、  メインのタイムラインには、そのムービークリップだけ配置する

    • ベストアンサー
    • Flash
  • 【AS3】ムービークリップからステージへアクセスできません

    はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • flashでムービークリップを逆再生

    flashでムービークリップを逆再生でタイムラインに配置したいです。 アクションスクリプトを使うところまではわかっているつもりです。 いろいろと検索して、試してみたのですがうまくいきませんでした。 おそらくそんなに難しいことではないと予想しているのですが。 指示をいただけると幸いです。 よろしくお願いいたします。

  • Flashでの画像の読み込みについて

    質問です。 少し大きめの画像(jpg,gif,png)をフラッシュのステージ上に配置すると プレビューではキレイに見えるのですが、パブリッシュすると荒れてしまいます。いろいろとネットを観たのですが明確な解決策がありません。 助けてください。。

専門家に質問してみよう