メイン 迷える子羊の部屋【初心者専用】
外部swfのstageの記述方法について | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| aya0821 | Åê¹ÆNo.48668 投稿日時: 2012-1-18 15:41 |
新米 ![]() ![]() 居住地: 投稿: 2
使用環境:
Win7,Flash5.5 |
外部swfのstageの記述方法について windows7
flash5.5 AS3 で作成しております。 アクションスクリプト自体を始めて間もなく、恐縮ながら初めて質問させていただきます。 現在、外部swfを読み込んで親swfに表示させるというフラッシュを作成しています。 親swfの中には複数のボタンがあって、ボタンを押すと指定したラベルへ飛び、子swfを読み込みます。 更に子swfの中に複数ボタンがあり、押すとムービークリップを読み込みます。 子swfを単独でパブリッシュするとエラーもなく上手くいくのですが、親swfをパブリッシュすると、子swfの中で記述したイベントリスナーが下記のようにエラーとなってしまいます。 エラー内容************************************************* TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at movie_fla::MainTimeline/mov_motion() *********************************************************** mov_motionというのは、子swf側のマウスに追従するメニューバーの部分です。 子swf側なのにstageと記述している部分が問題なのかと、いろいろなサイトを拝見しましたが、私のレベルが低すぎて何をどう書き変えればいいのか理解できませんでした。。 子swf側のエラーとなるイベントリスナーのスクリプトです↓↓↓ ----------------------------------------------------------- var speed:int = 0; var friction:Number = 0.2; leftBtn.addEventListener(MouseEvent.ROLL_OVER, leftRollOver); leftBtn.addEventListener(MouseEvent.ROLL_OUT, rollOut); rightBtn.addEventListener(MouseEvent.ROLL_OVER, rightRollOver); rightBtn.addEventListener(MouseEvent.ROLL_OUT, rollOut); function leftRollOver(event:MouseEvent):void{ speed = 20; } function rightRollOver(event:MouseEvent):void{ speed = -20; } function rollOut(event:MouseEvent):void{ speed = 0; } addEventListener(Event.ENTER_FRAME, mov_motion); var goalX:Number = mov_mc.x; function mov_motion(event:Event):void{ var nextX:Number = goalX + speed; if(nextX<=0 && nextX >= -mov_mc.width+this.stage.stageWidth){ goalX +=speed; }else if(speed == 20){ goalX = 0 }else{ goalX = -mov_mc.width+this.stage.stageWidth; } mov_mc.x += (goalX - mov_mc.x)*friction; } ----------------------------------------------------------- 親swf側のラベル”movie”に記述したスクリプトはこれです↓↓↓ ----------------------------------------------------------- var movie; var loader = new Loader(); var my_swfbox:Sprite; var url_req = new URLRequest("movie.swf"); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); loader.load(url_req); //スプライトを配置して、その中に呼び出し my_swfbox = new Sprite(); addChild( my_swfbox ); my_swfbox.addChild( loader ); function onProgress(event) { var percent = Math.floor(loader.contentLoaderInfo.bytesLoaded / loader.contentLoaderInfo.bytesTotal * 100); loadingBar.percent_txt.text = String(percent); loadingBar.loaded_mc.scaleX = percent / 100; } function onLoaded(event) { loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaded); movie = loader.contentLoaderInfo.content; movie.scaleX = 1; movie.scaleY = 1; m_load_mc.addChild(movie); removeChild(loadingBar); movie.play(); } ----------------------------------------------------------- 読み込み側もこれで合っているのかわかりませんが、 ほぼ見よう見まねで作っているので間違いだらけかもしれません。 説明不足な点がございましたらご指摘の程よろしくお願いいたします。 |
| ひろゆき | Åê¹ÆNo.48670 投稿日時: 2012-1-18 15:55 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: 外部swfのstageの記述方法について まず、使用環境は「アカウント編集」で、その他の項目に記載しておきましょう。
なお、Flash5.5などというバージョンは存在しません。Flash CS5.5 が正しいです。 次に、スクリプトは、見やすいように、[code][/code]で囲んで、掲載しましょう。 また、スクリプトはコードを貼り付けるだけでなく、 どこに記述したとか、どんなインスタンスをどこに配置してあるかの情報も必要です。 第三者が再現しやすいような説明を心がけてください。 また、長いスクリプトを見せられても、回答者の負担が増えるだけです。 必要最低限度のスクリプトに絞って質問し直されることをお勧めします。 とりあえず、不要な部分を削って、 説明されているスクリプトでmain.fla, movie.flaを作成しても、 残念ながら、問題は発生しません。 説明されていない部分で、問題が発生していると思われます。 引用: 親swfの中には複数のボタンがあって、ボタンを押すと指定したラベルへ飛び、子swfを読み込みます。 ここが一番問題だと思われますが、これについての説明が不足しているので、 具体的に問題と解決策を提示することはできませんね。
|
| aya0821 | Åê¹ÆNo.48677 投稿日時: 2012-1-18 18:01 |
新米 ![]() ![]() 居住地: 投稿: 2
使用環境:
Win7,Flash5.5 |
Re: 外部swfのstageの記述方法について 返信いただいてありがとうございます。
説明不足で申し訳ありませんでした。。 >>親swfの中には複数のボタンがあって、ボタンを押すと指定したラベルへ飛び、子swfを読み込みます。 更に子swfの中に複数ボタンがあり、押すとムービークリップを読み込みます。 の説明なんですが、親swf側のメインタイムラインにmenu_mcとcontent_mcというムービークリップを置いていて、menu_mcとcontent_mcの両方のタイムラインにmovieラベルを指定しています。 親swf側 content_mcのmovieラベルには前述したスクリプトを書いています。 親swf側 menu_mcのmovieラベルには下記スクリプト ---------------------------------------------------------------------------------------------------------------- initBtns(); movie_btn.buttonMode = false; movie_btn.mouseEnabled = false; movie_btn.gotoAndStop("_selected"); ---------------------------------------------------------------------------------------------------------------- 親swf側 menu_mcの1フレーム目には下記スクリプト ---------------------------------------------------------------------------------------------------------------- addEventListenerToBtns(); gotoAndStop("home"); function addEventListenerToBtns(){ movie_btn.addEventListener(MouseEvent.CLICK,onClickMovieBtn); } function onClickMovieBtn(event){ MovieClip(parent).showContent("movie"); } function initBtns(){ initBtn(movie_btn); } function initBtn(target_btn){ target_btn.gotoAndStop("_selected"); target_btn.buttonMode = true; target_btn.mouseEnabled = true; target_btn.mouseChildren = false; } //ロールオーバー時 movie_btn.addEventListener(MouseEvent.ROLL_OVER, onBtnOver); //ロールアウト時; movie_btn.addEventListener(MouseEvent.ROLL_OUT, onBtnOut); //ロールオーバー時実行される; function onBtnOver(event) { event.target.gotoAndPlay("_up"); } //ロールアウト時実行される; function onBtnOut(event) { event.target.gotoAndPlay("_over"); } ---------------------------------------------------------------------------------------------------------------- なるべくスクリプトを削ったつもりですが長くて申し訳ありません。 子swf側では前述したものの下に以下のスクリプトを記述しています↓ ---------------------------------------------------------------------------------------------------------------- closeButton.visible = false; var mov_myloader = new Loader(); var url1 = new URLRequest("images/2012.swf"); // テキストフィールドオブジェクトを作成する var textBox = new TextField(); // 表示リストに登録する addChild(textBox); textBox.x = 300; textBox.y = 68; textBox.width = 300; //プリローダーのイベント; mov_myloader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); //各ボタンが押されたらswfファイルをロード; mov_mc.m01_btn.addEventListener(MouseEvent.CLICK,function(evt) { mov_myloader.unloadAndStop(); mov_myloader.load(url1); screen_mc.addChild(mov_myloader); textBox.text = "BS番組オープニング2012年版"; closeButton.visible = true; }); //プリローダーの関数; function loadHandler(evt) { mov_myloader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadHandler); var loaderInfo = evt.target; var loader = loaderInfo.loader; } closeButton.addEventListener(MouseEvent.CLICK,myonCLICK); function myonCLICK(evt:MouseEvent):void { screen_mc.removeChild(mov_myloader); textBox.text = ""; closeButton.visible = false; mov_myloader.unloadAndStop(); } ---------------------------------------------------------------------------------------------------------------- 再度長くなってしまって申し訳ございません。 どこが間違っているのか見当がつかないもので、 必要のないものまで書いてしまったかもしれません。 何卒よろしくお願いいたします。 |
| ひろゆき | Åê¹ÆNo.48678 投稿日時: 2012-1-18 18:09 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: 外部swfのstageの記述方法について 解決するおつもりがおありならば、
指示されたことを1つ1つ解決していかないと、単なる丸投げにしかなりません。 (1) スクリプトは、見やすいように、[code][/code]で囲んで、掲載しましょう。 (2) 一度に複数のことをやっても、どこに問題があるのか分かりにくくなるだけです。 不要な部分を削除したうえで、質問し直しましょう。 例えば、今回の問題では、ローディングの部分は不要でしょうし、 他にも、特段必要のないものがいくつも存在します。 複数の外部swfファイルを読み込む機能は必要ないでしょう。
|
| ひろゆき | Åê¹ÆNo.48679 投稿日時: 2012-1-18 18:25 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: 外部swfのstageの記述方法について 例えば、main.flaのスクリプトは、
どこかからスクリプトを拾って来て、訳も分からず、コピー&ペーストして、混乱するのではなく、 きちんと理解したうえで、理解できる部分から組み立てるようにしてください。
|
| 野中文雄 | Åê¹ÆNo.48680 投稿日時: 2012-1-18 19:50 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 外部swfのstageの記述方法について ひろゆきさんのアドバイスを、勘違いされているのではないでしょうか。
「必要最低限度のスクリプトに絞って」というのは、スクリプトを「抜書きする」という意味ではありません。それがおできになるくらいなら、おそらくご自分で解決までたどり着くはずです。そうではなく、スクリプトを実際に「削って」ということです。「どこが間違っているのか見当がつかない」のでしたら、片端から順番に「削って」試せばよいことです。「必要のないもの」は、削っても問題の動作が変わらないものです。→「トラブルの『捜査手順』」 引用: aya0821さんは書きました: |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




10.8.5
Flash Professional CS4/CS6/CC

Vista Home Premium (SP1)
「必要最低限度のスクリプトに絞って」というのは、スクリプトを「抜書きする」という意味ではありません。それがおできになるくらいなら、おそらくご自分で解決までたどり着くはずです。

