AS3 Event.ADDED_TO_STAGEについての疑問
- Event.ADDED_TO_STAGEについての調査をしていますが、特に使用する必要はない場合が多いようです。
- SWFを外部からロードする場合だけでなく、他の場面でもEvent.ADDED_TO_STAGEを使用している例があります。
- コンストラクタ内でのsuper()の目的や、初期化のためのsuper()の記述について理解できていません。
- ベストアンサー
as3 Event.ADDED_TO_STAGE
flash cs5で記述しています。 Event.ADDED_TO_STAGEについて調べていますが、 現在まで特に使用しなくても、ステージ上でイベントもしくわマウスイベントなどを 起こす事ができています。サイトに乗っていた記述では、もしあるSWFが外部から ロードされる場合は、Event.ADDED_TO_STAGEを記述しなければならない。 という事は、それ以外のときには記述する必要はないという事でしょうか? しかしながら、 http://www.webzaru.net/as30/974/ のサイト (中段のスクリプト) にあるような、外部にSWFをロードする目的ではない時にも 使用している例があります。(結構あります。) 現在、上記のサイトのスクリプトの理解に努めています。 (webzaru様から引用) public function Main():void { super(); if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); の必要性が全くわかりません。 また、上記ではコンストラクタの記述をしているところですが、 なぜその中に、また初期化をするためのsuper();が記述されているのかがよくわかりません。(自分のイメージの中には初期化する設定の中にまた初期化する設定があるように見えています。) ご存知の方いらっしゃいましたら、是非教えていただけますと助かります。 何卒よろしくお願い致します。
- naonao321
- お礼率66% (58/87)
- Flash
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 補足で書かれていらっしゃる件に関して。 > 1、ifの書き方について… その if文 の書き方は中括弧を省略しているだけです。 これは ActionScript に始まったことではなく その基となった JavaScript でも さらにその基の JAVA でも さらに C でも共通でできる書き方です。 「プログラマで、生きている カッコをつけたコードはカッコわるいのか論争」 http://el.jibun.atmarkit.co.jp/hidemi/2009/07/post-29fb.html 「if文の括弧は省略できるなら省略するのは是か非か バシャログ。」 http://c-brains.jp/blog/wsg/09/08/05-004630.php その他 例えば VBA や VBS などでも if文に中括弧こそ出てきませんが 括りを省略できるという仕様自体は共通です↓。 '-------------------- aaa = 1 If aaa = 1 Then MsgBox aaa End If '-------------------- . ↓同じこと↑ '-------------------- aaa = 1 If aaa = 1 Then MsgBox aaa '-------------------- たいていの言語で共通の事柄ではないかと思います。 > 2、if (stage) がどんな状況… if文とは, そもそも () の中が true であるかどうかを判断して true であればそれに続く {} 内などの文を実行するというものです。 ※この場合の true とは Boolean とは限りません。 if(ココがtrueであれば){ ココが実行される } それでは 広義で言う(Booleanとは限らない) 「true とは何か?」というと, 「false ではないもの(false 以外のもの)」となります。 ではその 広義で言う 「false とは何か?」というと, 「false」または「0」または「」または「null」または「undefined」などになります。 新規ドキュメントを作成して 次のスクリプトをフレーム1に書き ムービープレビューしてもらうと理解が深まるかもしれません。 //------------------------------------ var aaa = 0; if(aaa) trace(aaa + " は true です。"); else trace(aaa + " は false です。"); var bbb = 1; if(bbb) trace(bbb + " は true です。"); else trace(bbb + " は false です。"); var ccc = 100; if(ccc) trace(ccc + " は true です。"); else trace(ccc + " は false です。"); var ddd = ""; if(ddd) trace(ddd + " は true です。"); else trace(ddd + " は false です。"); var eee = "あ"; if(eee) trace(eee + " は true です。"); else trace(eee + " は false です。"); var fff = null; if(fff) trace(fff + " は true です。"); else trace(fff + " は false です。"); var ggg = !null; if(ggg) trace(ggg + " は true です。"); else trace(ggg + " は false です。"); var hhh = undefined; if(hhh) trace(hhh + " は true です。"); else trace(hhh + " は false です。"); var iii = !undefined; if(iii) trace(iii + " は true です。"); else trace(iii + " は false です。"); var jjj:MovieClip; if(jjj) trace(jjj + " は true です。"); else trace(jjj + " は false です。"); jjj = new MovieClip(); if(jjj) trace(jjj + " は true です。"); else trace(jjj + " は false です。"); //------------------------------------ 感覚的に簡単に言えば 「偽」の他に「無」とか「空」とか「存在しないもの」が false です。 その false 以外が true です。 ですから if (stage) は「ちゃんと stage が存在したら」のような意味になります。 上記スクリプトで言えば 最後の jjj に関する2例がこれに最も近いケースになります。 > 3、中段のinit()と下段のリスナー関数のinitは > なぜ名前が同じものになってるのでしょうか?。 同じにしないと 関数init は実行されないからでしょう。 だから同じにしてある(というか 関数init を実行するために書いてある)のです。 init は initialize の略で initialize を英語的に言えば「初期化」などの意味があります。 しかし ActionScript においては何の意味も持ちません。 例えば TV は television の略ですが ActionScript においては何の意味も持たないのと同じです。 もちろん自分で init という名のクラスや関数やインスタンスなどを作れば意味が出てきます。 しかし ActionScript の元のキーワードには init などありません。 この場合は private function init で定義した勝手な関数名です。 なお私も使い方などを全く知りませんが initialize という名のメソッドであれば Locale クラスというクラスにあるようです。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
Google で「Event.ADDED_TO_STAGE」と検索しただけで トップに次のページがヒットしましたが。。。 「Event.ADDED_TO_STAGEをドキュメントクラスで使う理由」 http://sinketu.com/?p=225
補足
ご回答ありがとうございます。 すみません、もう少し質問させていただいてよろしいいでしょうか。 1、ifの書き方についてですが、上記の中でif(条件式){} という書き方になっていないのはなぜでしょうか? 2、if (stage) がどんな状況を意味するのかわかりせん。if stage != nullということらしいのですが、「stageが否定されているとき」、、、?とはどんな時なのでしょうか? 3、中段のinit()と下段のリスナー関数のinitはなぜ名前が同じものになってるのでしょうか?。中段のinit()は初期化をする関数で、下のinitはただのコールバックの名前 と考えていたのですが、これは間違いでしょうか? これらで混乱しています。 よろしくお願い致します。
関連するQ&A
- 「swfファイルが読み込まれたら」という条件文をASで書くと・・?
行き詰まってしまいました。 わかる方居られましたら、アドバイスいただけないでしょうか。 例えば、以下のような構成になっていると仮定します。 load.swfという読み込み元のファイルがあって、ボタンが3つ。 それに「loadarea」と名前をつけたMCを、外部swfの読み込み用エリアとして配置しました。 同じ階層(フォルダ内)に ・sample1.swf ・sample2.swf ・sample3.swf 上記のように構成されているとします。 load.swf内の「ボタン1」を押すと、外部swfファイルのsample1.swfが読み込まれるというスクリプト(以下)をボタン1に記述しました。 on(release){ loadMovie("sample1.swf", _root.load_area); } ここからが問題なのですが、 上記のように、外部swfファイルが読み込まれたら何々する(例えば、sample1が読み込まれたら、load.swf内のボタン1のアルファ値を変更する)というようなスクリプトを組みたいんですが、上手くいきません。 if文で記述することは可能なんでしょうか?
- ベストアンサー
- Flash
- AS3.0による外部swfの制御
AS3.0による外部swfの制御 質問させていただきます。 やりたいと事は、メインとなるswfのボタンを押して、 読み込んだ外部swf(stopしている)を再生(play)したいと考えております。 メインのswfはAS3.0、読み込む外部swfはAS2.0になります。 環境はFlash CS3です。 以下がスクリプトになります。 //swf読み込み配置 var loader_obj : Loader = new Loader(); var url : URLRequest = new URLRequest("test.swf"); MovieClip(root).loader_obj.load(url); loader_obj.y = 3 loader_obj.x = 392 stage.addChild(loader_obj); //swfボタン制御 btn.addEventListener(MouseEvent.ROLL_OVER,btn_play); function btn_play(event:MouseEvent):void {MovieClip(root).photo.gotoAndPlay(2);//メインswfのムービーリップも動かす <--ここに外部swfを参照するスクリプトが入ると思うのですが・・・-->gotoAndPlay(2);//外部swfの2フレーム目から再生 } 肝心の所のスクリプトはわかりません・・・ 宜しくお願い致します。
- ベストアンサー
- Flash
- 重たい外部swfのプリロード
空のmcをステージにおき、そのフレームに、loadMovie();で外部のswfを読み込むまでは、出来るのですが、その外部swfが重い場合なので、プリロード(%)表示させたいのですが、どの場所にどういったscriptが、必要ですか? onClipEvent (data)ハンドラで外部ファイルのロードを待つとかのscriptを書いてるのですが、間違っているのでしょうか?
- 締切済み
- Flash
- Flash professional CS5を使っており,AS3.0で
Flash professional CS5を使っており,AS3.0で記述しています。 外部swf(test.swf)をムービークリップ(my_mcとしました)に読み込むには どのようにコードを記述すればよいのでしょうか? MovieClipLoaderを使う物や var urlReq:URLRequest=new URLRequest("test.swf"); var swfLoader:Loader=new Loader(); swfLoader.load(urlReq); このようにロードする方法は見つかったのですが my_mc = loader.content as MovieClip; などとしても ムービークリップに読み込めません。 いろいろ試したのですが直接ステージに読み込まれて表示されたり,エラーも起こらず表示されなかったりします。 よろしくお願いします。
- ベストアンサー
- Flash
- AS3.0 配置したインスタンスにswfの読み込み
初歩的なご質問です。 AS3.0にて、ステージ上に配置したムービークリップ(インスタンス名:mc)に外部swf(test.swf)を読み込みたいのですが、、どうもうまくいきません。 わかりやすく申しますと、AS2.0形式では mc.loadMovie("test.swf"); となっているスクリプトをAS3.0で行いたいです。 拙い文章で恐縮ですが、よろしくお願いいたします。
- ベストアンサー
- Flash
- 子swfから親swfのstageを参照したいです
親swf(a.swf)のアクションスクリプトで子swf(b.swf)を読み込んでいます。 フルウィンドウのFlashを作る勉強中です。 親swfには stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; などの指定がしてあります。 そして、子swf(b.swf)内で親swf(a.swf)のstageをターゲットとしたイベントリスナーを使いたいのですが、 リスナー関数のアクションがうまく動いてくれません。 (リスナー関数のターゲット指定の方法が間違っているだと思うのですが、結果としてリスナー関数が正常に動かずy座標の値が意図した位置に表示されないのだと思います。) 以下のサイトを参考に試行錯誤中です。 http://riptac.net/html/memo/memo_actionscript/memo_actionscript_233/ MovieClip(root.parent).funcOya(); と言う、親に記述された関数の参照方法を特に参考にして 親のステージを指定しようと思いたったのですが… 『強制型変換に失敗しました。…flash.display.MovieClip に変換できません。』 とエラーが出てしまいます。 同じ事をしているように思えてしまうのですが… どのように指定したら良いのでしょうか。 どうぞご教授のほど宜しくお願い致します。 ※FlashCS4、AS3、Windowsで作業しています。 a.swf------------------------------------------------------- var bLoader:Loader = new Loader(); var bUrl:String = "b.swf"; var bLoader_mc:MovieClip; bLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, funcCompB); bLoader.load(new URLRequest(bUrl)); function funcCompB(e:Event):void{ bLoader_mc = MovieClip(bLoader.content); addChild(bLoader_mc); } b.swf------------------------------------------------------- //移動させる背景画像 var bgMC:MovieClip=new BgMC(); addChild(bgMC); bgMC.x=0; //親swfをムービークリップ化 var oyaMC:MovieClip=MovieClip(root.parent); //ウィンドウがリサイズするたびに位置を合わせる oyaMC.stage.addEventListener(Event.RESIZE, resizefunc); function resizefunc(event:Event):void{ bgMC.y=oyaMC.stage.stageHeight; }
- 締切済み
- Flash
- 【AS3】ムービークリップからステージへアクセスできません
はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。
- ベストアンサー
- Flash
- 動くボタンの作り方
MX2004を使っています…。 ステージ上のa_mcの中にb_mcがあってb_mcには onClipEvent (enterFrame) { this._rotation +=2 } というスクリプトを記述しました。 これでステージ上の動きはうまく行っていて さらに、それにb_mcにボタン機能をつけたいと思い、 b_mcの中にボタンクリップ→c_mcをつくりました。 そのボタンクリップにつけたい動きは、そのボタンにマウスを重ねると _rootに配置した、空のhyouji_mcに外部の0000_swf現れ、マウスを放すと消えるというものなのですが いろいろ本などをみてとりあえずそのボタンクリップ→c_mcに on(rollOver){ loadMovie("0000.swf",hyouji); } on (press) { getURL("url"); } というスクリプトをつけてみました。 getURLは正常に動くのですが外部ファイルは読み込めません… ちなみに、_rootに配置した、空のhyouji_mcにはhyoujiのインスタンス名を入れています。あと、swfフィアルは、元のファイルと同じところに入れています。 スクリプト勉強中で原因がわかりません… mcの入れ方など、間違っているところがありましたら ご指摘よろしくおねがいします… 他のスクリプトをみても、自分のファイルにうまく応用できない状態です…_rootに配置した、外部swfがマウスを放すと消えるというスクリプトも教えて頂けるとありがたいです。 宜しくお願いします。
- ベストアンサー
- Flash
- Flash AS3.0 初歩的な質問
現在AS3.0を勉強中です。 基本中の基本だと思いますがパスが上手く通っていないようなので ご教授願いたく。 1.ステージ上にテキストボックス(ダイナミックテキスト)を配置しインスタンス名を「hako」としています。 2.rootに以下のスクリプトを記述 ------------------------------------------------- addEventListener(Event.ENTER_FRAME,syori); function syori(eventObject:Event):void { hako.text=String(stage.mouseX); } ------------------------------------------------- ここまでは問題なく動作しています。 2をrootでは無く任意のムービークリップから処理させるべく・・・ 3.「abc」というインスタンス名のムービークリックを作成しステージに配置。この1フレーム目に以下のスクリプトを記述 ------------------------------------------------- addEventListener(Event.ENTER_FRAME,syori); function syori(eventObject:Event):void { parent.hako.text=String(stage.mouseX); } ------------------------------------------------- ※この際、2でrootに記述したスクリプトは消しています。 これで動くと思ったのですがエラーがでます。(ToT;) 「parent.hako.text」の部分を「root.hako.text」としてもエラーがでます。「_parent」も「_root」も駄目です。(「_」付はAS2.0までですよね?) 今回はダイナミックテキストは使った例ですが、 単純にムービークリップをステージに配置して、その座標を指定するような処理でも、 他のムービークリップから別のムービークリップを参照する方法が解りません(汗) どうすればよいでしょうか? AS2.0までは上記のような形でパスが通ったと思うのですが・・・
- ベストアンサー
- ホームページ作成ソフト
- 外部SWF読み込み後の座標指定
こんにちわ いろいろなサイトを見たものの 適切な答えがなかったので質問します ステージ上のボタンをクリックしたら 外部SWFが読み込まれる仕組みのものなのですが クリックしたのち そのボタンの中心に 外部SWFの中心が重なり合うような 座標指定はどのようなスクリプトなのでしょうか? 現在は on (release) { this.loadMovie("1.swf"); } となっております。 アドバイスお願いいたします。 FLASH8 WINDOWS XP使用です。
- ベストアンサー
- Flash
お礼
細やかなご説明本当にたすかります。 省略が許されされるということは全く気がつきませんでした。 またtrue falseの考え方についても式の結果だけでなく状態を示すもである事も 盲点でした。本当に助かりました。またよろしくお願い致します。