PDA

Просмотр полной версии : Экспортер динамической библиотеки


AlexCooper
14.12.2011, 05:50
Доброго время суток.
В своей работе имитирую динамическую библиотеку.
package wa.games.tanks.display.skins.classes
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.errors.IOError;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Bitmap;
import flash.display.BitmapData;

public class SkinLogistic extends Sprite {

private var skinlib:Array;

public function SkinLogistic() {
skinlib = new Array();
}

public function addSkin(id:String, url:String):void
{
var imageLoader:Loader = new Loader();
imageLoader.load(new URLRequest(url + "?id=" + id));

skinlib[id] = new Object();
skinlib[id].status = 'LOAD';
skinlib[id].resource = imageLoader;
skinlib[id].resource.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
skinlib[id].resource.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
}

public function verify(property:String = null):String
{
switch (property)
{
case "loading":
{
for ( var temp:* in skinlib )
{
if (skinlib[temp].status == 'LOAD')
{
return 'LOAD';
break;
}
}
return 'COMPLETE';
} break;
}
return 'NaN';
}

public function export(id:String, type:String = null):* {
switch (type)
{
case "bitmap":
{
return skinlib[id].resource.content;
} break;

case "sprite":
{
var sp:Sprite = new Sprite();
sp.addChild(skinlib[id].resource);
return sp;
} break;

default:
{
return skinlib[id].resource;
} break;
}
}

public function get status():String
{
return STATUS;
}

private function onLoadComplete(e:*):void
{
var id:String = e.target.parameters.id;
skinlib[id].status = 'ACTIVE';
}

private function onLoadError(e:*):void
{
var id:String = e.target.parameters.id;
skinlib[id].status = e.toString();
}
}
}
Но в результате выполнения

var skin:SkinLogistic = new SkinLogistic();

skin.addSkin('LineBack', 'sources/lineback.png')

var line1:* = skin.export('LineBack','sprite');

var line2:* = skin.export('LineBack','sprite');

line1 и line2 ссылаются на один и тотже объект, а мну нужно что бы ссылания вообще не было, а объекты получали лишь объект который по сути нужно просто клонировать.

Помогите пожалуйста.
Может что не понятно написал, комментируйте уточню.

wvxvw
15.12.2011, 11:20
Я задумку не понял. Одно могу сказать наверняка - switch с одним case выглядит очень странно. И еще более странно выглядит break после return.

GBee
15.12.2011, 20:39
Код вообще ужасен.
line1 и line2 не могут ссылаться на один объект, если верить вашему коду - это два разных спрайта. line2 по идее содержит лоадер, который вы пихнули ранее.

Добавлено через 2 минуты
Не хотите весь скин пихнуть в свфку и забирать оттуда по getDefinition?