開発記録 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);
}
}
}