ちくのう症(蓄膿症)は「菌」が原因!?

FLASH MX2004を使っているActionScript初心者です。

別に作ったSWFファイルをFLASH作成画面に読み込み、
再生はできたのですが、そのSWFファイルをクリックして
ボタンの機能を付けたいのですが、エラーになり、
スクリプトを設定できません。

下記のようなスクリプトはSWFには使用できないのでしょうか。

onClipEvent (mouseDown) {
    _root.m01._visible = true;
    _root.m01.stop();
}

それとも、そもそもSWFにスクリプトを設定することはできないのでしょうか。

いろいろと間違っているかも知れませんが、ご教授ください。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> 下記のようなスクリプトは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_eventha …

この回答への補足

BlurFiltan様、ご回答どうもありがとうございます。
イベントハンドラの歴史的経緯は大変勉強になりました。
まだまだ勉強不足ですが、よろしくお願い致します。

-------------------------------
this.onMouseDown = function() {
_root.m01._visible = true;
_root.m01.stop();
};
-------------------------------
フレームに記述したら、おっしゃる通り、
Flash上のどこをプレスしてもイベントが発生しました。
イベント的には正解なのですが、再生されているSWFファイルのみを
クリックした時にイベントを発生することは不可能でしょうか。

SWFファイルは別で作成し、ライブラリにインポートして、
直接FLASHのタイムラインに読み込んでおります。

そのSWFファイルはShape tweenで作成した少し長めの複雑なムービーなので、
インポートしてまとめてスクリプトを当てたいために
このような感じでやっております。

もし他にこのようなSWFファイルをクリックしてイベントを
発生させる方法がありましたら、ご教授いただけましたら助かります。

どうぞよろしくお願い致します。

補足日時:2008/09/03 11:45
    • good
    • 0

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 を使います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

SWFファイル自体にスクリプトを設定してみましたが、
なぜかエラーになってしまいました。

SWFファイルの上に透明ボタンのムービーを作り、
それをクリックすることで、問題は解決されました。

いろいろと勉強になりました。
どうもありがとうございました。

お礼日時:2008/09/04 10:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング