- ベストアンサー
Actionscript3.0の記述場所について
Flash、Actionscript3.0独学の者です。 シーンを分けてFlashコンテンツを作成しているのですが、 全シーンに使う関数はどこに記述したらよいのでしょうか。 全シーンの1フレーム目に書いたら関数の定義が重複してしまいます。 初歩的な質問ですみませんが、よろしくお願いいたします。 ■開発環境 ・windows7 professional 64bit :・Adobe Flash CS6
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
同じ関数名の関数であれば 全シーン の 1フレーム目 に重複して書いても ムービー全体の 1フレーム目 に重複して書いても どっちにしても重複すると思います。 つまり 同じ階層に同じ関数名の関数を定義するのでしたら どのフレームに書いても重複するものは重複するのですから その点に関してだけ言えばどこに書くとかは全く関係ないでしょう。 もし,全シーンに使う関数が複数あって それら関数の内容が全く同じでしたら 1つだけの関数で済むわけですから そもそも重複定義などする必要はなく メインタイムラインの最初のシーンの最初のフレームに1つ書いておけば良いだけではないでしょうか? それで何か不都合が生じるのでしょうか? 逆になぜ全シーンの1フレーム目に全く同じ関数を定義するのか,その意味がわかりません。 (そんな変なことを元からしなければ良いだけなのではないかという意味です。) また,全シーンに使う関数が複数あって それら関数の内容が違うのでしたら 当然名前は変えるべきですし。。。 とにかく なぜ全シーンの1フレーム目に同じ関数名の関数を定義しようとされているのかがわかりませんが もし何かのインスタンスに その関数を addEventListener することがあるのでしたら その addEventListener と関数自体は分けて考えた方が良いでしょう。 関数だけは先に定義しておいて インスタンスが登場したときに addEventListener するという意味です。 架空状況として... たとえば 「シーン 1」の フレーム1 からボタン「a_btn」が登場し 「シーン 2」の フレーム2 からボタン「a_btn」とボタン「b_btn」が登場するとします。 そして 各ボタンをクリックしたときに各ボタンのインスタンス名を出力する関数を用意するとします。 その場合 「シーン 1」の フレーム1 には //関数 test の定義 function test(e:MouseEvent):void{ //クリックした対象インスタンスのインスタンス名を出力 trace(e.currentTarget.name); } //「a_btn」のイベントリスナーとして関数 test を登録 a_btn.addEventListener(MouseEvent.CLICK,test); と書いて 「シーン 2」の フレーム1 には //「a_btn」のイベントリスナーとして関数 test を登録 a_btn.addEventListener(MouseEvent.CLICK,test); //「b_btn」のイベントリスナーとして関数 test を登録 b_btn.addEventListener(MouseEvent.CLICK,test); と書けば良いでしょう。 つまり関数の定義は1回で良いです。 具体的状況がわからないので, このくらいの漠然とした架空状況でのことしか書けませんが。。。
お礼
お礼遅くなってしまいすみません。 addEventListenerと関数をひとまとめにしてました… 関数は一回で、addEventListenerを必要なシーンに書くのですね! ありがとうございました!