FLASHでSWFをボタン化する方法

このQ&Aのポイント
  • FLASH MX2004を使っているActionScript初心者の方が、別に作ったSWFファイルをFLASH作成画面に読み込んで再生することはできますが、SWFにボタンの機能を付けることはできません。
  • SWFにスクリプトを設定することはできないため、お望みの機能を実現することは難しいです。
  • ご教授いただければ幸いです。
回答を見る
  • ベストアンサー

SWFをボタンにしたい

FLASH MX2004を使っているActionScript初心者です。 別に作ったSWFファイルをFLASH作成画面に読み込み、 再生はできたのですが、そのSWFファイルをクリックして ボタンの機能を付けたいのですが、エラーになり、 スクリプトを設定できません。 下記のようなスクリプトはSWFには使用できないのでしょうか。 onClipEvent (mouseDown) {     _root.m01._visible = true;     _root.m01.stop(); } それとも、そもそもSWFにスクリプトを設定することはできないのでしょうか。 いろいろと間違っているかも知れませんが、ご教授ください。 よろしくお願い致します。

  • dex2
  • お礼率75% (12/16)
  • Flash
  • 回答数2
  • ありがとう数3

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

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

> 下記のようなスクリプトはSWFには使用できないのでしょうか。    それと > それとも、そもそもSWFにスクリプトを設定することはできないのでしょうか。 と書かれていらっしゃる意味がよくわかりませんが, onClipEvent (mouseDown) {…} はいったいどこに書かれたのでしょうか? SWF は外部SWFでしょう? たとえば,「sample.swf」。 「sample.swf」 はファイルですから, ファイル自体にそもそも onClipEvent (mouseDown) {…} など書けないでしょう。 FlashMX2004 の場合(ActionScript2.0の場合), スクリプトは, 「フレーム」 と 「ムービークリップ」 と 「ボタン」 そして, 「外部 AS ファイル(テキスト)」 この4箇所に書けます。 この4箇所のうち, onClipEvent (mouseDown) {…} は 「ムービークリップ」 自体にしか書けないイベントハンドラです。 「フレーム」 や 「ボタン」 に書いた場合はエラーになります。 ちょっと歴史的経緯を入れます。 on(release) など on() イベントハンドラ は, 初代 Flash からあって, これは元は 「ボタン」 自体のみに書けるスクリプトです。 onClipEvent (mouseDown) など onClipEvent () イベントハンドラは, Flash 5 から登場して(後にすぐに廃れる), これは 「ムービークリップ」 自体のみに書けるスクリプトです。 Flash MX (本当は Flash 6 であるべきバージョン)になって, on() イベントハンドラ は,ムービークリップにも書けるようになりました。 それと同時に, on(release) は, ○○.onRelease = function() {} onClipEvent (mouseDown) は, ○○.onMouseDown = function() {} というような,イベントハンドラメソッド の形で,フレームに書けるようになりました。 この イベントハンドラメソッド の登場によって, on() イベントハンドラ の方は比較的長く生き残りましたが, onClipEvent () イベントハンドラ の方はみるみるうちに廃れて行きました。 onClipEvent (mouseDown) {…} をフレームに書きたい場合は, ------------------------------- this.onMouseDown = function() { _root.m01._visible = true; _root.m01.stop(); }; ------------------------------- のようになります。 しかし onClipEvent (mouseDown) や this.onMouseDown は, Flash上のどこをプレスしてもイベントが発生しますよ。 ムービークリップに指定するというよりも, イメージ的には Flash 全体に指定するという感じになります。 あと別件で気になるのが _root です。 親SWF内の ムービークリップ に 外部SWF をロードした場合, 外部SWF は単なるムービークリップ扱いになりますから, その中に書かれた _root は,親SWFの _root になります。 _root がずれることが多々ありますので,その点注意してください。 onClipEvent (mouseDown) などに関する詳細は, 下記 URL を参考にしてみてください。 「ムービークリップのイベントハンドラ」 http://homepage3.nifty.com/ginga-b/MX/mc_eventhandler.html

dex2
質問者

補足

BlurFiltan様、ご回答どうもありがとうございます。 イベントハンドラの歴史的経緯は大変勉強になりました。 まだまだ勉強不足ですが、よろしくお願い致します。 ------------------------------- this.onMouseDown = function() { _root.m01._visible = true; _root.m01.stop(); }; ------------------------------- フレームに記述したら、おっしゃる通り、 Flash上のどこをプレスしてもイベントが発生しました。 イベント的には正解なのですが、再生されているSWFファイルのみを クリックした時にイベントを発生することは不可能でしょうか。 SWFファイルは別で作成し、ライブラリにインポートして、 直接FLASHのタイムラインに読み込んでおります。 そのSWFファイルはShape tweenで作成した少し長めの複雑なムービーなので、 インポートしてまとめてスクリプトを当てたいために このような感じでやっております。 もし他にこのようなSWFファイルをクリックしてイベントを 発生させる方法がありましたら、ご教授いただけましたら助かります。 どうぞよろしくお願い致します。

その他の回答 (1)

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

SWFファイルライブラリにインポートされているのですか。 状況がよくわかりませんが...(普通あまりそういうことはしない)。 > SWFファイルのみを > クリックした時にイベントを発生することは不可能でしょうか。 これは #1 にも書きましたよ。 結局ボタンにしたいのですから, on(release) など on() イベントハンドラ か, そのイベントハンドラメソッド版 ○○.onRelease = function() {} を使えば良いのです。 まず, そのステージ上に配置したSWF(というか中身が壊れたMC)にインスタンス名を付けます。 たとえば 「swf_mc」 と付けたとします。 その場合その「swf_mc」が存在する _root の フレーム に書くスクリプトは次のようになります。 _root.swf_mc.onPress = function() { _root.m01._visible = true; _root.m01.stop(); }; 上では onPress を使いましたが,これはマウスダウンに近いからです。 通常は onPress ではなく,上にも(#1にも)書いた,onRelease を使います。

dex2
質問者

お礼

ご回答ありがとうございます。 SWFファイル自体にスクリプトを設定してみましたが、 なぜかエラーになってしまいました。 SWFファイルの上に透明ボタンのムービーを作り、 それをクリックすることで、問題は解決されました。 いろいろと勉強になりました。 どうもありがとうございました。

関連するQ&A

  • ムービーをクリックしてボタンを動かしたい

    FLASH MX 2004を使っているAction Script初心者です。 動いているb01というボタンをクリックすると、m02というムービーが表示され、b01とm02はストップし、m02をクリックするとm02は消え、b01が再度動き出すということをしたいのですが、b01とm02のストップまではできたのですが、ストップしたb01を動かすことができません。 【b01】 on (release) { _root.m02._visible = true; stop(); } 【m02】 onClipEvent (load) { this._visible = false; } on (release) { _root.m02._visible = false; _root.b01.play(); } いろいろと間違っているかも知れませんが、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ボタンをクリックでムービーを表示させストップ、その際、他のボタンは関係なく動いている

    FLASH MX 2004を使っているAction Script初心者です。 http://oshiete1.goo.ne.jp/qa4288529.html で前回の問題は解決できたのですが、新たな問題が発生しました。 _root   ├b01(モーショントゥイーンなどで動くボタン)   ├m01(表示/非表示 が変わるムービークリップ)   ├b02(モーショントゥイーンなどで動くボタン)   └m02(表示/非表示 が変わるムービークリップ) 動いているb01というボタンをクリックすると、m01というムービーが表示され、b01とm01はストップし、m01をクリックするとm01は消え、b01が再度動き出し、その間はb02は関係なく動いているというようにしたいのですが、全体がストップ、全体が動き出す、もしくはストップしないというようになってしまいます。 b02はb01と同様にクリックすると、m02というムービーが表示され、b02とm02はストップし、m02をクリックするとm02は消え、b02が再度動き出し、その間b01は関係なく動いているという仕様です。 【b01】 on (release) { _root.m01._visible = true; _root.m01.stop(); _root.b01.stop(); } 【m01】 onClipEvent (load) { this._visible = false; } on (release) { _root.m01._visible = false; _root.b01.play(); } 【b02】 on (release) { _root.m02._visible = true; _root.m02.stop(); _root.b02.stop(); } 【m02】 onClipEvent (load) { this._visible = false; } on (release) { _root.m02._visible = false; _root.b02.play(); } いろいろと間違っているかも知れませんが、ご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • フラッシュMXのナウローディングとロードムービー

    最近フラッシュMXをウインドウズXPで使い始めています。質問です。よろしくお願いします。 フラッシュで a.swf に b.swfを読み込ませたいと思っています。b.swfにはナウローディングをつけています。 b.swfの最初につけたナウローディングスクリプトです。 onClipEvent (load) { _root.stop(); var LoaderMC = _root; } onClipEvent (enterFrame) { this.percentloaded = Math.floor(LoaderMC.getBytesLoaded()/LoaderMC.getBytesTotal()*100); trace(this.percentloaded+"%"); this.percentMC.percentdisplay = percentloaded+"%"; this.loaderbalken._xscale = percentloaded; if (percentloaded == 100 && !initialized) { initialized = true; trace("ロード終了"); _root.gotoAndPlay("loadok"); } } a.swfにb.swfを読み込むために、a.swfに次のスクリプトをつけています。 loadMovie("b.swf", "***"); 読み込まれることは読み込まれるのですが、b.swfのローディング画面でストップしてしまい、それ以降b.swfは再生されません。 a.swfに配置してあるアニメは問題なく再生されているのですが。ちなみにb.swfは単体では正常にナウローディング後、再生されます。 なぜ b.swfは再生が止まってしまうのでしょうか。よろしくお願いします。

  • 外部swfファイルの閉じ方

    メインに"stage2というmcを配置し、123.swfを読み込むボタンを配置しました。 ボタンスクリプト: on (release) { _root.construction(); loadMovie("123.swf", "_root.stage"); _root.stage.swapDepths(5); for (i=1; i<=4; i++) { _root["m_"+i]._visible = false; } 開いた外部swfファイルを閉じる設定をしたいのですが、どのようにすればよいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 2つのswfファイルをつなげている場合の一括ローディング方法

    お世話になります。 この質問の下の質問で、外部JPGファイル読み込みのローディング方法を質問しておられますが、そこを読んでも、外部swfファイル読み込みの際のローディング方法に応用することが出来ませんでした。 700Kのswfの最後のフレームに、 loadMovieNum("img/next.swf", 0); として、500kのnext.swfファイルとつなげています。 最初のswfファイルの1シーン目で、2つのswfを全て読み込み、再生時のつながりをスムーズにしたいと考えています。 最初のswfの1シーン目に、 ローディングオブジェクトを置き、 onClipEvent (load) { _root.stop(); par = 0; bar._xscale = 1; } onClipEvent (enterFrame) { par = parseInt((_root.getBytesLoaded() / _root.getBytesTotal()) * 100); if (par == 0) { par = 1; } else if (par >= 100) { par = 100; _root.gotoAndPlay("start"); } bar._xscale = par; } ローディングすると、フレームラベル「start」 に飛び、 そのフレームに置いているオブジェクトに onClipEvent (load) { par = 100; bar._xscale = 100; } onClipEvent (enterFrame) { _alpha -= 5; } を書き込んでいます。 そして、2シーン目に飛び、 2シーン目の最後のフレームに、 loadMovieNum("img/next.swf", 0); を置いてつなげています。 FLASH本を数冊持っているのですが、2つのswfを 同時にローディングする方法が載っておらず、 こちらに質問を書かせていただきました。 もしかしたらこの質問の下質問JEPファイルの ローディングと内容がかぶってるかもしれませんが、 よろしくお願い致します。 【制作環境】 Win XP FLAS MX

    • ベストアンサー
    • Flash
  • ポップアップを一定時間、またはマウスが乗っている間表示させておく

    スクリプトに詳しくないので、教えていただきたいです。 画面上のあるエリアにマウスをのせるとポップアップウィンドウのようなものが表示され、 その中にあるボタンをクリックすると外部swfを読み込むという仕組みを 作りたいと思っています。 下に書いてあるスクリプトでポップアップが出てくるようにしたのですが、 その次がわからなくて困っています。 (1)マウスがエリアから外れても、一定時間(例えば1秒とか)ポップアップを 表示したままにしたい (2)ポップアップにマウスがのっている間は表示させておきたい (1)はエリア部分とポップアップが離れている場合(といってもほんの少しです)を 考えてのことです。 いい方法がありましたらぜひ教えてください。 どうぞよろしくお願いいたします。 エリア部分に書いたActionScript --------------------------------------------------------------- onClipEvent (load) { _root.popup._visible = false; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { _root.popup._visible = true; } else { _root.popup._visible = false; } } ---------------------------------------------------------------

    • ベストアンサー
    • 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
  • ParaFlaのswfバージョン

    flash製作ツール「ParaFla」についてです。 「ファイル(F)」-「プロジェクトのプロパティ(P)...」で設定できる、 「SWFバージョン」の項目について質問します。 このバージョンを変更すると、具体的に何が変わるのでしょうか?? ”携帯はswf4しか再生できない”とも聞きましたが、 私の携帯ではswf7まで再生できました。 また、ActionScriptも使うので、その点についても併記して、 ご教示願いたいと思います。

    • ベストアンサー
    • Flash
  • 複数のswfを順番に再生するやり方

    失礼します。 再生時間が長いFlashアニメーションを作成するときアニメーションを分割して作成したほうが編集しやすいと思い、複数のFlashアニメーションを分割して作成してメインのFlashで順番に読み込んで再生するということをしたのですが、 メイン.swf ┣ローディング:loading.swf    ↓ ┣読み込んで1番目再生:no1.swf ↓ ┣読み込んで2番目再生:no2.swf ↓ ┣読み込んで3番目再生:no3.swf ↓ ┗読み込んで4番目再生:no4.swf 終わり 上記のような感じで再生させたいのです。 現在はno1.swf、no2.swf、no3.swfの最後のキーフレームに_root.nextFrame();を記述して、メイン.swfではmovie_spaceという名前のムービークリップを作成して2,3,4,5のフレームのステージに設置し、2,3,4,5のキーフレームに_root.movie_space.loadMovie("no1~4.swf");を記述して連続で再生するように作りました。 できればメイン.swfでこの複数のswfファイルを制御して、読み込んで再生、終わったら次のファイルを再生と順番に連続再生させたいのですがそういう方法ってあるでしょうか? ちなみに作成環境はFlash8 ProでActionScript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript3.0のswf読み込み

    ActionScript2.0のflashファイルに外部のActionScript3.0のswfを読み込むことはできないのでしょうか。よろしくお願いします。