メイン コーダーズルーム【スクリプト系】 xmlデータ読み込みとTimerクラスでの切り替え | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
igaito | Åê¹ÆNo.44254 投稿日時: 2010-1-8 16:16 |
新米 居住地: 九州 投稿: 7
使用環境:
Windows Vista Home Basic, Flash CS3 |
xmlデータ読み込みとTimerクラスでの切り替え JPEGのファイルを外部XMLファイルを使って読み込み、一定の秒数で
そのJPEGが切り替わるフォトアルバムみたいなものを作っています。 XMLデータの読み込みとJPEGの表示まではなんとか、できたのですが 一定の秒数で切り替える部分がうまくいきません。 以下が、現状のソースです。 XMLloader.as package { import fl.motion.MotionEvent; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.display.*; import flash.utils.Timer; public class XMLloader extends Sprite { //プロパティ private var urlLoader:URLLoader; private var xml:XML; private var max:uint; private var dataList:Array; private var imgLoader:Loader; private var container:Sprite; private var imgLink:String; private var imgPath:String; private var minutetimer:Timer; //コンストラクタ public function XMLloader() { init(); } //XML読み込み private function init() { //URLLoaderオブジェクトの作成 urlLoader = new URLLoader(); urlLoader.load(new URLRequest("xml/imgload.xml"));//xmlファイルをロード //XMLデータ読み込み完了イベント作成 urlLoader.addEventListener(Event.COMPLETE, completeLietener); dataList = []; //Arrayの初期化 imgLink = new String(); //Element<link> imgPath = new String(); //Element<path> //タイマー作成 minutetimer = new Timer(3000, 0); //タイマーイベント作成 minutetimer.addEventListener(TimerEvent.TIMER, onTick); //スタート minutetimer.start(); imgLoader = new Loader(); //Loaderオブジェクトを作成 container = new Sprite(); //Spriteオブジェクトを作成 addChild(container); //addChildで追加 //ロード完了イベント imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded); //マウスイベント container.addEventListener(MouseEvent.CLICK, onClick); container.addEventListener(MouseEvent.MOUSE_OVER, onOver); container.addEventListener(MouseEvent.MOUSE_OUT, onOut); } //XML読み込み完了後 private function completeLietener(e:Event):void { //XMLオブジェクトの作成 xml = new XML(e.target.data); max = xml.item.length(); for (var i:uint = 0; i < max; i++) { imgPath = xml.item[0].path; imgLink = xml.item[0].link; imgLoader.load(new URLRequest(imgPath)); dataList.push([imgPath, imgLink]); //配列にElementを追加 //trace(imgPath); //trace(imgLink); } } //ロード完了後 private function imgLoaded(e:Event):void { container.x = 12; container.y = 11; container.addChild(imgLoader.content); } //タイマーイベント private function onTick(e:TimerEvent):void { var count:int = minutetimer.currentCount; var seconds:Number = (minutetimer.delay * count) / 1000; trace(count + "回目" + seconds + "秒"); imgPath = xml.item[1].path; imgLink = xml.item[1].link; imgLoader.load(new URLRequest(imgPath)); } //クリックイベント private function onClick(e:MouseEvent):void { var request:URLRequest = new URLRequest(imgLink); navigateToURL(request, "_self"); } private function onOver(e:MouseEvent):void { buttonMode = true; } private function onOut(e:MouseEvent):void { buttonMode = false; } } } この部分でもう一度画像を変えようとしているのですが 3秒経過した時点で以下のようなエラーが出てしまいます。。。 ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。 at flash.display::Loader/flash.display:Loader::_load() at flash.display::Loader/load() at XMLloader/::onTick() at flash.utils::Timer/flash.utils:Timer::_timerDispatch() at flash.utils::Timer/flash.utils:Timer::tick() /********************************************************** //タイマーイベント private function onTick(e:TimerEvent):void { var count:int = minutetimer.currentCount; var seconds:Number = (minutetimer.delay * count) / 1000; trace(count + "回目" + seconds + "秒"); imgPath = xml.item[1].path; imgLink = xml.item[1].link; imgLoader.load(new URLRequest(imgPath)); } /********************************************************** XMLファイルはこちらになります。 xml/imgload.xml <?xml version="1.0" encoding="utf-8"?> <img> <item> <path>img/lbanner_01.jpg</path> <link>http://www.adobe.com/jp/</link> </item> <item> <path>img/lbanner_02.jpg</path> <link>http://japan.cnet.com/</link> </item> </img> かなりはまってしまって抜け出せないでいます。 どうかご教授いただければと思います。 ------------------------ 環境 OS:Windows Vista Flashバージョン:CS3 ------------------------
|
ひろゆき | Åê¹ÆNo.44255 投稿日時: 2010-1-8 18:14 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: xmlデータ読み込みとTimerクラスでの切り替え まず、検証するにあたって、第三者が確認しやすいものにした方がよいでしょう。
そのためには、xml, リンクは不要です。 複雑にしているために、問題点がはっきりしないと思います。 端的に言うと、読み込みが完了していない状態で、Timerが動いているのが問題だと思います。 1. 画像を読み込み始める。 2. 読み込みが完了したら、Timer開始。 3. 一定時間たったら、次の画像を読み込み始める。(1へもどる) という流れが一番わかりやすいのではないかと思います。
|
ひろゆき | Åê¹ÆNo.44256 投稿日時: 2010-1-8 18:44 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: xmlデータ読み込みとTimerクラスでの切り替え 以上が正常に動いていることが確認できてから、xmlの読み込み、リンクを実装した方がいいように思います。
|
igaito | Åê¹ÆNo.44257 投稿日時: 2010-1-8 18:52 |
新米 居住地: 九州 投稿: 7
使用環境:
Windows Vista Home Basic, Flash CS3 |
Re: xmlデータ読み込みとTimerクラスでの切り替え ひろゆき様
迅速かつ丁寧なご説明ありがとうございます。 いただいた内容と自分の内容を確認しながら 実装してみたいと思います。 本当にありがとうございました。
|
igaito | Åê¹ÆNo.44259 投稿日時: 2010-1-8 21:43 |
新米 居住地: 九州 投稿: 7
使用環境:
Windows Vista Home Basic, Flash CS3 |
Re: xmlデータ読み込みとTimerクラスでの切り替え ひろゆき様
ご連絡が遅くなりました。 無事実装することができました >_< ありがとうございました!!
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |