• ベストアンサー

スクリプトはどこに書く?MCとボタンの違いは?

ちょっと根本的な質問なのですが、 ActionScriptはどこに書くのが流行というかスマートだとされているんでしょうか? 私は普段、まとめて書いたほうが後で探しやすいだろうと思って 全てステージに書いています。 ネット上でサンプル等を落としてみるとムービークリップに書いているものをよく見るので、自分のやり方は主流ではないのかな?と若干心配になりました。 でもMCに書いていると、MCが多くなった時にスクリプトを探すのが大変ではないでしょうか? それと、普段はボタンは使わずシンボルはすべてムービークリップにして使っていますが、これもあまりよくないでしょうか? いまいちボタンの存在意義がわかっていないのかも知れませんが、 ボタンでないと出来ない事などはあるのでしょうか? 完全に独学な上に、今までほかの人と意見交換などをする機会もなかったので ここで質問させていただきました。 意見いただければ幸いです。

  • tkmojo
  • お礼率62% (116/186)
  • Flash
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • ossan_zzz
  • ベストアンサー率50% (6/12)
回答No.2

ActionScriptでゲームやヴィジュアルサイト、動画再生コンテンツを仕事として作っている者です。 一応仕事上での定石を書いておきます。 まず、タイムライン上にスクリプトを書く事はほとんどしません。 stopやgoto~ぐらいでしょうか? ボタンの作成も、マウスカーソルを重ねたとき(ロールオーバー)やクリック時の動作等は全てASファイルに記述し、MCにクラス指定をする事で読み込ませて対応しています。 なぜか? >でもMCに書いていると、MCが多くなった時にスクリプトを探すのが大変ではないでしょうか? これに対応するためです。 他ページへの移動やランダム処理等、同じ様な処理をコピペで複数のMCに記述するのも良いですが、修正するのが大変です。 スクリプトの一元管理のためには、ASファイルによるクラス化は必須です。 これはAS2.0でも3.0でも同じです。 クラス化の方法や詳しい概念はここで記述するには長くなるので割愛させていただきます。 代わりにお勧めの書籍を紹介します。下記URLの物です。 AS3.0で、なおかつ4,000円と高価な本ですので、趣味で楽しまれているには不要と思いますが、より高度なフラッシュを作成したいと言う事であればまず強く購入をオススメします。 http://www.amazon.co.jp/gp/product/4881665901/ref=s9qpick_c4_img3-rfc_g1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-4&pf_rd_r=0X3FEB8V71DQ2XGG5GMC&pf_rd_t=101&pf_rd_p=74576506&pf_rd_i=489986 クラス化の方法や詳しい概念はネットで検索するだけでも、色々と役に立つブログやサイトがあるので探してみてください。 また、このクラスと言う概念を理解すると、他のクリエーターが作成されているライブラリを活用する事が出来ます。 XMLの簡単な処理、スクリプトによるモーショントゥィーン(タイムラインで行うより遥かに滑らかで簡単!!)、3D表現、物理演算。 これらの事がものすごく短時間で実現可能となります。 どちらにせよ、今後のヴィジョンとやりたい事によると思います。 クラスの概念の理解にも、それなりの時間と努力は必要ですから。 ただ、Flashで出来る事は皆さんが思っている以上に増えています。 せっかく高価なソフトを使うのであれば、こう言った所に目を向ける事も面白いのではないかと思います。

tkmojo
質問者

お礼

お礼が大変遅くなり、申し訳ありません。 回答ありがとうございます。 職業としてされている方なら、基本は外部ファイルにするのですね。 asを外部で、というのはやったことがないのですが、 これから挑戦してみようと思います。

その他の回答 (2)

回答No.3

個人的な意見ですが参考までに おそらくtkmojoさんは色々試されていると思います。 スクリプトをステージに書く。 ボタンをムービークリップで作るなど。 個人的には色々な書き方を知っていれば あとはCaseByCaseで書いていけばよいのではないでしょうか? 一緒に作業する人、引き継ぐ人に合わせる。 2.0的な書き方になれた人ならボタンを使う構築にするとか。 これから3.0的な書き方に少しでも近づけたい と言うならステージのみに書いていくとか。 (厳密には3.0は書き方が違いますが) >でもMCに書いていると、MCが多くなった時にスクリプトを探すのが大変ではないでしょうか? ご存知かもしれませんが こちらに関してはアクションパネルの左側に インスタンス一覧が出ます。 そこでインスタンスをクリックすると mcに書かれているスクリプトを見れるので便利です。 逆の場合もインスタンス名が<>つきで表示されますよ。 >ボタンでないと出来ない事などはあるのでしょうか? こちらに関しては私の知る限りではないと思うのですが。。。 まとめますと今の書き方でいいと思います。 ちなみに私も同じ書き方です。

tkmojo
質問者

お礼

お礼が大変遅くなり、申し訳ありません。 回答ありがとうございます。 自分のやり方が主流なのかどうかよくわからずやってましたが、 回答を見て安心したのでとりあえず今のままで進んでいこうと思います。

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> ネット上でサンプル等を落としてみるとムービークリップに > 書いているものをよく見るので、 > 自分のやり方は主流ではないのかな? > と若干心配になりました。 onClipEvent() のことですか? もしそうであれば, それはおそらく古いサンプルでしょう。 現実問題, onClipEvent() は Flash5 で登場して, FlashMXでは MovieClip.on○○ にほとんど取って変わられてしまいましたから, その命は短命だったと思います。 MC や ボタン 自体にスクリプトが書けるのは,今のところActionScript2.0 までです。 FlashCS4 や CS5 などで仕様変更がないかぎり,ActionScript3.0 では, ムービークリップにもボタンにもスクリプトは書けません。 その点, 主流であってもなくても(そんなことはどうでも良いのですが), フレームに書く習慣というものは大切だと思います。 > でもMCに書いていると、 > MCが多くなった時にスクリプトを探すのが大変ではないでしょうか? うーん... それは何とも言えませんね。 逆に フレーム に書いた方が, 「このMCを動かしているスクリプトはどこにあるの!!!??」 って探すのが大変な場合もあるかもしれません。 動かしたいMCに たとえば次のように書いておけば自動的に動きます。 onClipEvent (enterFrame) { this._x += 10; if (this._x>=Stage.width+100) { this._x = -100; } } インスタンス名も何も不要です。 ステージに配置した目の前にあるそのMCに対して, 「動け!」 と書いているだけのことで, オブジェクト指向とか抜きで主観的に動かせます。 またMCの一番の特徴(メリット)は, 「ムービーの中にムービーを持てる。」 =「世界の中に別世界を構築できる。」 ということです。 たとえばMCの中に複数フレームを持たせて, その中に色々なアニメーションを作成できるわけです。 そのムービークリップ内アニメーションの最終フレームで stop() させたい場合は, ムービークリップ内タイムラインの最終フレームに stop() を書くべきです。 _root のフレームからずっとMCのタイムラインを監視させて, 最終フレームに達すればそのMCを stop(); させることは可能ですが, 普通はそういう方法は取るべきではありません。 ムービークリップがたくさんあればあるほど, その最終フレームに stop() を書くべきです。 onClipEvent() は使わないにしても, やはりMCの中にスクリプトは書くべき場合は多々多々あると思いますから, そういったものまで含めると, MC にスクリプトを書くことは凄く大切なことだと思います。 > それと、普段はボタンは使わずシンボルは > すべてムービークリップにして使っていますが、 > これもあまりよくないでしょうか? 良くないことは決してありませんが,面倒くさいでしょう。 ボタンなら自動的に何も指示しなくても, 「アップ」フレームには普通の状態の絵 「オーバー」フレームにはマウスを乗せたときの絵 「ダウン」フレームにはボタンを押したときの絵 をそれぞれ用意すればあとは, そのボタン.onRelease = function(){   gotoAndPlay(5); }; や,そのボタン自体に, on(release){   gotoAndPlay(5); } と書くだけでボタンとして機能しますから楽チンです。 (ただし,ボタンの場合融通の利いた反応を見せてくれません。たとえばトグルボタンのような動き。) 楽か楽でないかというだけの違いと, on(release){   gotoAndPlay(5); } などを使った場合,階層をそんなに気にしなくて良いというのがボタンのメリットです。 使いたくなければまったく使う必要はありません(怒っているのではなくて,ホントにそう思います。)。 しかし, ムービークリップの onClipEvent() はどうでも良いとして, ボタンはやはり, ボタンに直接書く on(release) などが使えた方が主観的で良くないでしょうか? と私は思います。  「ボタンはクリックすれば動くような命令が書ければそれで良い!  なぜわざわざインスタンス名を付けて  関係のないフレームにスクリプトを書かねばならないんだ!?」 なんて方はたくさんいらっしゃると思います。 それに一般的に身近な言語(JavaScript や HTML の onClick などや VBA のボタン自体に書けるプログラムなど)では,ボタンに実行命令を書いたりボタンから function などを実行できます。 現在の ActionScript3.0 だけが非常に特殊に思えます。 プログラミング的にはどうであっても, 人間の普通の感性として,「そのものに対して教え込ませる(犬に対してお手をさせる)」ような感覚は普通あるのではないかと思います。 そういう方は多いと思うので(実際に多いので), 仕様変更はあるかもしれませんが, とにかく現在は「フレームに書く」というのが主流ですし, その方法を使っていて決して間違いではありません。 一応参考まで。 超一流のプロの方々の談義です。 「FLASH-JP.COM - フォーラム on(release)がなくなる!?」 http://www.flash-jp.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=5211&forum=20 (この談義は延々と11ページに渡ります。時間があってもし読む気になればと言う意味で書いただけです。決して読んだ方が絶対良いという意味のものではありません。)

tkmojo
質問者

お礼

お礼が遅くなり、大変申し訳ありません。 回答ありがとうございます。 確かにムービークリップに直接書くのも直感的にわかりやすいですよね。 3.0でボタンやMCに書けないというのは知りませんでした。 今は2.0を使っていますが、3.0を勉強していつか移行する際にスムーズにできるよう、 今まで通りフレームに書くようにしていこうと思います。

関連するQ&A

  • ボタンを押すとMCが大きくなるFlash

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

    • ベストアンサー
    • Flash
  • 【action script】複数のMCを・・・

    環境:Flash8 actionscript2.0 10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか? ムービークリップそれぞれに mc1 mc2 mc3 …mc10 とインスタンス名をつけています。 さらにその下位層に mc1  └kai_mc mc2 └kai_mc ・ ・ ・ mc10 └kai_mc と置いています。 このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。 それぞれ個別に書くと _root.mc1.onRelease=function(){ _root.mc1.kai_mc.nextFrame() } と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。 自分で以下のように書いてみました。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ _root["mc"+i].kai_mc.nextFrame() } } うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ trace(i) } } で出力すると 11と表示されるのでpassが違うとは思うのですが・・・ iを1~10で指定しているのになぜ11となるのでしょうか? どうすればpass指定できるのでしょうか? そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash5 「ボタン」シンボルの制御について

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

  • Fl cs6 as3.0 複数のMCの動かし方。

    はしめまして。 Flash cs6 Actionscript3.0で、動画のコンテンツ(web用)に作ろうと思っているas3.0初心者です。 早速、質問をさせてもらいます。 今、ステージ上にA、B、C3つのムービークリップがあります。 それを、それぞれA_mc、B_mc、C_mcとします。 Aのムービークリップが基本的に、ステージ上にあるようにして そのAの中にあるボタン(Bがステージに入ってくる)をクリックすると Bと入れ替わる。 BとCにはそれぞれ、A、B、Cが移動するボタンがついています。 BにあるC、がステージに入ってくるボタンを押せば、Bと入れ替わりCがステージ上に現れます。もちろんその逆もあります。 B、Cがステージにいないときには必ずAがいることにしたいのです。 B、Cが入れ替わる間もAが B、Cが動いている間はステージにいます。 AとBはステージ上方向への移動。 Cはステージ下方向への移動。 (ステージ上にあるのは、A、B、Cのいずれか一つです) モーショントゥイーンを使えば何となく(ホントに何となく)出来るのですが 使わずにasで作りたいと考えています。 出来れば、動きだしと、動き終わりのスピードなども変えたいと思っています。 アクションの記述を教えていただきたいと思います。 お手数ですが、初心者ですので分かりやすく お願いいたします。 それでは、宜しくお願いします。

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

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

    • ベストアンサー
    • Flash
  • テキスト入力と同じ名前のムービークリップを配置したい

    FLASH8を使っています。 動物のムービークリップがいくつかあり、シンボルプロパティで名前と識別子を同じものに設定しました。例えば「うま」というようにひらがなで同じ名前が入力されています。 リンケージの「ActionScriptに書き出し」と「最初のフレームに書き出し」にはチェックが入っています。 ステージ上のテキストフィールドに「うま」と入力し、ボタンをクリックすると同じ名前のムービークリップシンボルがステージ上に配置されるようにしたいのですが、どのように書けばいいでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • (AS3)「var mc:MovieClip = new MC?();」 の?の部分を変数にできないか

    タイトルの通りです。 今ライブラリには100個のムービークリップがあって、それぞれMC1~MC100までのリンケージ名(クラス名)でActionScriptに書き出しているものとします。 これらを動的に「var mc:MovieClip = new MC?();」というふうにしたいのですが、うまくいきません。 一応下のように自分なりに考えてみたのですがやっぱりダメでした。 var i:int = 3; var str:String = "MC"+i; var mc:MovieClip = new str(); stage.addChild(mc);

    • ベストアンサー
    • Flash
  • loadMovieしたムービークリップのボタン化

    ムービークリップにloadMovieで1.jpgをロードし、それをボタンにしたいのですが、下のスクリプトではうまく動作しません。 menu01_mc.loadMovie("1.jpg"); menu01_mc._xscale=10; menu01_mc._yscale=10; menu01_mc.onRelease = function(){ gotoAndStop(5); } 最初のloadMovieの部分をなくし、 menu01_mc.onRelease = function(){ gotoAndStop(5); } とするとちゃんと動作します。 loadMovieしたムービークリップはボタンにできないのでしょうか? FlashCS3、actionscript2.0で作成しています。 よろしくお願いします。

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

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

    • ベストアンサー
    • Flash
  • removeChildで描画した絵(シンボル:ムービークリップ)を消し

    removeChildで描画した絵(シンボル:ムービークリップ)を消したい。 お世話になります。 adobe Flash pro ActionScript 3.0 で作成しております。 左クリックを押したら、 var mc:pen=new pen; addChild(mc); mc.x=mouseX; mc.y=mouseY; でpenというムービークリップを表示させるようにしております。 removechildで消せるということはわかっているのですが、 具体的にどのようにしたら消せるのでしょうか? (1)直前に書いたmcを削除する方法 (2)今までに書いた全てのmcを削除する で教えて頂ければと思いますのでよろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう