• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SWFをボタンにしたい)

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

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

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

  • ベストアンサー
  • 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ファイルの上に透明ボタンのムービーを作り、 それをクリックすることで、問題は解決されました。 いろいろと勉強になりました。 どうもありがとうございました。

専門家に質問してみよう