• ベストアンサー

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

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

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

  • ベストアンサー
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