• ベストアンサー

flashの基本的なことが理解出来ません。

windowsXPで、FlashMXを始めたばかりの初心者です。 ActionScriptを始めようと、何冊かの参考書を読み始めましたが、 一番最初に書かれている、フレーム、ムービークリップ、ボタンアクションの、 特に、フレームとムービークリップのアクションの違いがよく解りません。 どういう時に、フレームアクションを書くのか・・・良く理解出来ません。 何かに例えて、教えていただけませんでしょうか? 宜しくお願いします。

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

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

フレームアクションは、そのフレームが再生された時(再生ヘッドがそのフレームに来た時)に実行されるアクションです。 例えばフレーム10まで再生して、フレーム5に戻らせたい場合は、フレーム10に  gotoAndPlay(5); というようにアクションを設定します。 関数を定義する場合も、フレームアクションが利用されます。例えば、  function Sample_Function()  {   trace("関数のサンプル");  } は、”出力ウィンドウに「関数のサンプル」の文字列を表示する”、という関数を定義していることになります。 関数は1度定義すれば充分です。何度も定義する必要はありません。ムービークリップアクションはイベントが起こる度に何度も繰り返される可能性がありますが、フレームアクションは、フレームが繰り返し再生されなければ1回しか実行されません。 ムービークリップアクションで関数を定義しても間違いではありませんが、無駄な処理を防ぐため、また、スクリプトを分かりやすくするためにも、フレームアクションが利用されます。 ムービークリップアクションは、「ムービークリップに何かが起こった時」に実行されるアクションです。 「何かが起こった時」を具体的に指示するものが、イベントと呼ばれるものです。 イベントにはいろいろな種類があります。ムービークリップがステージに登場した時に1度だけ発生する load、ムービークリップが再生されている間、常に発生している enterFrame 、マウスボタンが押された時に起こる mouseDown などが、よく使われるイベントです。 フレームアクションとの違いは、ムービークリップアクションを設定する時は、必ず  onClipEvent ( イベント名 )  {   ・・・  } このように、onClipEvent の中に処理を記述しなければならない点です。 また、フレームアクションはそのフレームが再生されれば実行されますが、ムービークリップアクションは、指定したイベントが発生しなければ実行されません。例えば、  onClipEvent ( mouseDown )  {   trace("マウスボタンが押された");  } は、ムービークリップがステージに存在していても、マウスボタンが押されなければ実行されません。その代わり、マウスボタンを押すたびに、出力ウィンドウに「マウスボタンが…」という文字列が表示されます。 ボタンアクションはムービークリップアクションと同様に、「ボタンに何か起こった時」に実行されるアクションです。 ボタンにはボタン独自のイベントがあります。ボタンがクリックされた時に発生する press 、ボタンが押されて離された時に発生する release 、ボタンの上にマウスカーソルが乗った時に発生する rollOver などがよく使われます。 load や enterFrame など、ムービークリップでのイベントはボタンでは利用できませんので、ご注意下さい。 ボタンにアクションを設定する時も、ムービークリップの時とよく似ていて、  on ( イベント名 )  {   ・・・  } このように、on の中に処理を書かなければいけないルールになっています。 ボタンアクションの場合も、指定したイベントが発生しなければアクションは実行されませんし、イベントが発生する度にアクションが実行されます。例えば  on ( press )  {   trace("ボタンがクリックされた");  } このようなアクションをボタンに設定しておくと、ボタンを押す度に出力ウィンドウに「ボタンが…」と表示されるようになります。 勘違いしないでいただきたいのは、これはフレームアクション専用、あれはムービークリップアクション専用、というアクションは、基本的にはないということです。 ムービークリップアクション専用、ボタンアクション専用のアクションは、onClipEvent と on くらいです。 例えば、前述のフレームアクションとして紹介した gotoAndPlay アクションですが、これは必ずフレームに設定しなければいけないという制限はありません。  on ( press )  {   gotoAndPlay(5);  } このように、ボタンアクションとして設定することも可能です。上記の例は、「ボタンが押されたらフレーム5に移動する」という意味です。 ムービークリップのシンボルの編集をすると、そのムービークリップが持つ独自のタイムラインが表示されます。 このタイムラインにもアクションを設定することができます。ムービークリップに設定するのだからムービークリップアクション、と思う方がいらっしゃいますが、タイムラインに設定するアクションは全てフレームアクションです。たとえそれが、ムービークリップのタイムラインに設定する場合であっても、です。 ムービークリップ/ボタンアクションとは、あくまでも、ムービークリップやボタンのインスタンスに設定するアクションのことを指します。 最初は私も、フレームアクションとムービークリップの違いが分かっていませんでした。 まずは簡単なスクリプトを組んでみて、そして、いろいろな失敗をしてみると、だんだん分かってくると思います。 なお、例として挙げたスクリプトは、インデントの都合上、行頭に全角のスペースが入っています。コピーして使う場合は、全て半角のスペースかタブに置き換えて下さい。このまま使うとシンタックスエラーになります。 長くなってすみませんでした。

dancepartner
質問者

お礼

返事が遅くなりました。 詳しくありがとうございます。何度も何度も読み返し、まだまだ勉強が足らないことを痛感しています。 出来れば、もう一つ教えていただきたいのですが、 スクリプトを書く場所ですが、『シーン』と『シンボル定義』に書く違いを教えて下さいませんか?

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

その他の回答 (2)

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

#2です。 シーンのタイムラインとムービークリップのタイムライン(シンボルを編集する時に表示されるタイムライン)に設定できるアクションは、機能的には殆ど同じです。書き方もどちらも同じように記述しますし、シーンのタイムラインに書けるスクリプトはムービークリップのタイムラインにも書けます。 ただし、どこのタイムラインに設定するかによって、アクションの働く対象が変わる場合があります。 例えば、シーンのフレーム10に  stop(); と書くと、フレーム10が再生された時点でムービーそのものが停止します。 しかし、同じアクションをムービークリップのタイムラインのフレーム10に設定した場合は、フレーム10を過ぎてもムービーは停止しません。では何が止まるのかというと、ムービークリップの持っているタイムラインがフレーム10(シーンのフレームではありません。ムービークリップのフレーム10です)で止まるのです。 Flash はムービークリップを入れ子にして管理することができます。実はムービー自体が、_root という名前のムービークリップです。この下の階層に自分の作ったムービークリップやボタンなどが入って、1つのムービーとして管理されています。 (これが、シーンでアクションを設定するのと同様の要領でムービークリップでもアクションが利用できる理由でもあります) ムービークリップはそれぞれが独立したタイムラインを持っており、シーンのタイムラインとは別に、独自のアニメを組んだり、内部のフレーム間を自由に移動したりできるようになっています。 先も申しました通り、アクションの機能そのものはどこに記述してもほぼ同じなのですが、どこのタイムラインに設定するかでアクションの働く対象が異なります。 ムービークリップそれぞれに独立したタイムラインがあって、複雑な作品も作りやすい利点はありますが、それだけに、ActionScript は、「どのムービークリップに対する指示なのか?」「どこのムービークリップで定義されている関数・変数なのか?」という指定にはうるさい作りになっています。特に指定がなければ、アクションを設定したムービークリップが対象になったり、そのムービークリップで定義された関数や変数のことを指していると見なされます。 まとまっていない回答で申し訳ありませんが、ご参考までに。

dancepartner
質問者

お礼

またまた詳しく、ありがとうございます。 書かれていることを頭に入れて、少しづつ試してみようと思います。また新たな難関にぶつかったら、 その時はまた投稿しますので、良い知恵をご伝授いただけたらと思います。

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

フレームアクションはその通りフレームに記述しますよね。例えばあるフレームAが読み込まれたらフレームBに飛ぶような処理をしたいとします。 その時にムービークリップにアクションを記述すると ムービークリップzを製作し、zに記述するアクションは onClipEvent(load){   _root.gotoAndPlay(100); } となります。それに対してフレームに記述すると Aをキームレームとし   _root.gotoAndPlay(100); と記述すれば終わります。 この2つはしている処理は同じことをしています。 違いはムービークリップに記述する場合はアクションを興さすためのムービークリップが1つ必要になります。 当然Flashで読み込ませるために何Kbかでも重くなってしまいます。記述するアクションも長い為にミスがしやすくなります。 フレームアクションですとアクション用のレイヤーを一つ作りそこにフレームアクションを記述していけばいいので,管理がしやすくなります。 大体こんな感じですかね。言葉で書くと分かりにくいので一度ご自分で試して見るのが一番いいと思いますよ。 失敗は成功の元です。頑張って下さい。 参考URLにフラッシュのサイトがいくつか載っていますのでよければどうぞ

参考URL:
http://www12.plala.or.jp/llink/
dancepartner
質問者

お礼

詳しくありがとうございました。 “習うより慣れろ”って感じですね。 いろいろなスプリクトを見て、違いを見つけようと思います。

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

関連するQ&A