Hatena::Groupactionscript

ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記

2009年03月08日 日曜日

ProgressEvent(3)描画の話

| 00:49 | ProgressEvent(3)描画の話 - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - ProgressEvent(3)描画の話 - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 ProgressEvent(3)描画の話 - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 のブックマークコメント

loading処理を別のfunctionにして、loadingでは用意したfunctionを実行するだけにしてみたら、描画が問題なくなっていました。ええ?でも、Openイベントでは処理されないなあ...もしかして、Circleコンポーネントの作りがおかしいのかな?たしか、描画のイベントが関係あるんだけれど。

これは、はまりそうです(というか、はまっています)。


というよりも、ProgressBarコンポーネントをおとなしく使え、とういことなのかなあ。やっぱり、UIComponetの理解が足りない気がする。Flexの肝なのかも、UIComponetは。


ソース(.as)

package
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	
	import mx.controls.Alert;
	import mx.core.UIComponent;

	public class LoadXML extends UIComponent
	{
		private var loader:URLLoader = new URLLoader();
		//public var filePath:String   = "Analytics.xml"
		public var filePath:String   = "http://f.hatena.ne.jp/twitter/rss";
		public var circle:Circle;

		public function LoadXML()
		{
				circle = new Circle();
				LoadData(filePath);
		}

		private function LoadData(url:String):void
		{
			var req:URLRequest = new URLRequest(url);
			loader.load(req);
			loader.addEventListener(Event.OPEN, onOpen);
			loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, Status);
			loader.addEventListener(Event.COMPLETE, onResult);	// 読み込み完了
			loader.addEventListener(ProgressEvent.PROGRESS, Loading);	// 読み込み中
			loader.addEventListener(IOErrorEvent.IO_ERROR, IoError);	// 読み込み失敗
		}
		private function onOpen(event:Event):void{
			trace(event);
		}

		private function onResult(event:Event):void
		{
			var xml:XML = new XML(event.target.data);
			trace(event);
			Alert.show(xml);
			circle.visible = false;
		}

		private function Status(event:HTTPStatusEvent):void
		{
			trace(event);
		}

		private function LoadingSetup():void
		{
			var nMax:Number = 100;
			var nMin:Number = 10;
			circle.width  = 100;
			circle.height = 100;
			circle.x      = Math.floor(Math.random()*(nMax-nMin+1))+nMin;;
			circle.y      = Math.floor(Math.random()*(nMax-nMin+1))+nMin;;
			circle.backgroundColor = 0xff0000;
			addChild(circle);	
		}

		private function Loading(event:ProgressEvent):void
		{
			LoadingSetup();
			trace(event);
			//Alert.show('読み込み中');
		}

		private function IoError(event:IOErrorEvent):void
		{
			//trace(event);
			Alert.show('読み込みに失敗しました');
		}		
	}
}

ProgressEvent(2) URLLoaderのイベント

| 15:40 | ProgressEvent(2) URLLoaderのイベント - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - ProgressEvent(2) URLLoaderのイベント - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 ProgressEvent(2) URLLoaderのイベント - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 のブックマークコメント

ProgressEventを発生させているのは、URLLoaderを使用した時です(他にもあるのかもしれませんが、今回は的を絞っています)。

URLLoaderを使用したときに、どんな順番でイベントが発生するんだろう?と思って調べてみました。すると、既にその答えが書かれていました。ありがたいです。

発生するイベントは、

complete      : ダウンロード処理が完了した
httpStatus    : 返信の HTTP ステータスが判明した
ioError       : IO エラーによりロード処理が中断した
open          : ロード処理が開始した
progress      : ロードを実行中
securityError : 許可されない通信を行おうとした

ということだそうです。なるほど。で、正常にcompleteまでされる時に発生するイベントの順番は

  1. open
  2. progoress
  3. httpStatus

でした。問題は、progressイベントの発生が遅いのです。なんで?

そして、気になることが書かれていました

2048バイトになってから発生する?これか?

TriswantoTriswanto2015/09/30 15:33You keep it up now, undtasernd? Really good to know.

OlaifaOlaifa2015/10/09 07:34Ah, i see. Well <a href="http://rppdxt.com">thta's</a> not too tricky at all!"

PauliusPaulius2015/10/09 11:58That's really thkiinng out of the box. Thanks! http://gkklhocjd.com [url=http://ipnylgsbivt.com]ipnylgsbivt[/url] [link=http://pxcmkhtxd.com]pxcmkhtxd[/link]

IreneIrene2015/10/10 06:41Great <a href="http://vopihm.com">stffu,</a> you helped me out so much!

SumiSumi2015/10/12 07:11We've arivred at the end of the line and I have what I need! http://zdyxqt.com [url=http://xchkwxili.com]xchkwxili[/url] [link=http://fqtatthp.com]fqtatthp[/link]