ホーム > 荒巻オンライン3 > 開発記録 2009/04/30

開発記録 2009/04/30

開発記録

  • キャラクターローダーが完成
  • 開発に集中できねえ

package jp.sourceforge.aramaki.objects.characters {
	import flash.display.Bitmap;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.utils.Dictionary;

	import mx.utils.Base64Decoder;

	import org.libspark.next.LoaderType;
	import org.libspark.next.N;

	/**
	 * キャラクターのロードが完了
	 *
	 * @eventType flash.events.Event.COMPLETE
	 */
	[Event(name="complete",type="flash.events.Event")]
	/**
	 * キャラクターのロードに失敗
	 *
	 * @eventType flash.events.IOErrorEvent.IO_ERROR
	 */
	[Event(name="ioError",type="flash.events.IOErrorEvent")]

	/**
	 * キャラクターローダー
	 */
	public class CharacterLoader extends EventDispatcher {
		private var _standImages:Array;
		private var _walkMotion:Array;

		public function get standImage():Array {
			return _standImages;
		}

		public function get walkMotion():Array {
			return _walkMotion;
		}

		/**
		 * キャラクターをロード
		 *
		 * @param fileName キャラクターXMLのファイル名
		 */
		public function load(fileName:String):void {
			N.load(fileName,LoaderType.XML).then=function(xml:XML):void {
				if (xml) {
					var images:Dictionary=new Dictionary;
					var commands:Array=[];
					var ids:Array=[];
					var base64Decoder:Base64Decoder=new Base64Decoder;

					for each(var image:XML in xml.images.image) {
						base64Decoder.decode(image.toString());
						commands.push(N.loadBytes(base64Decoder.toByteArray()));
						ids.push(image.@id.toString());
					}

					N.and(commands).then=function(results:Array):void {
						var l:length=results.length;
						var i:int;

						for (i=0;i<l;i++) {
							images[ids[i]]=(results[i] as Bitmap).bitmapData;
						}

						_standImages=[];

						for (i=0;i<8;i++) {
							_standImages.push(images[xml.standImage["@"+i]]);
						}

						for each(var frame:XML in xml.walkAnimation.frame) {
							var frameInfo:Object={wait:frame.@wait,images:[]};

							for (i=0;i<8;i++) {
								frameInfo.images.push(images[frame["@"+i]]);
							}

							frameInfo.images.push(frameInfo);
						}

						dispatchEvent(new Event(Event.COMPLETE));
					}
				} else {
					dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR));
				}
			}
		}
	}
}
package jp.sourceforge.aramaki.next {
	import org.libspark.next.Next;

	/**
	 * NextライブラリにLoadBytesTriggerを登録
	 */
	public function nextRegisterLoadBytes():void {
		Next.register("loadBytes",LoadBytesTrigger);
	}
}
package jp.sourceforge.aramaki.next {
	import flash.display.Loader;
	import flash.events.Event;
	import flash.utils.ByteArray;

	import org.libspark.next.Trigger;

	public class LoadBytesTrigger extends Trigger {
		private var loader:Loader=new Loader;

		/**
		 * コンスト☆ラクタ
		 */
		public function LoadBytesTrigger(bytes:ByteArray) {
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadCompleteHandler);
			loader.loadBytes(bytes);
		}

		/**
		 * ロード完了イベントハンドラ
		 */
		public function loadCompleteHandler(event:Event):void {
			call(loader.content);
		}
	}
}
カテゴリー: 荒巻オンライン3 タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。