从asForm看到一个StyleManager,感觉还不错
主要是提取用swf打包后的skin style
素材打包成swf好处在于 内部进行DefineBitsJpeg3压缩,文件体积比较小,但因为继承MovieClip,不是很轻量
也可以“手动”修改让它继承Sprite。
用jsfl批处理命令的话,写到swf里都是继承MovieClip,我手动修改成Sprite后,复制那条命令,重播一次还是继承MovieClip,比较杯具。
如果把图片直接Embed进主swf,压缩就没前者来的大,文件体积相对也会大些。
所以有好有坏,根据实际情况取舍。
当然如果要用Embed嵌入方式的话,那就用不上了
下面是用动态载入的方式
使用方法很简单,就不介绍了~
package form.core
{
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import form.events.StyleEvent;
public class StyleManager extends EventDispatcher
{
private var loader:Loader;
private var appDomain:ApplicationDomain;
private var _url:String;
public function get url():String{return _url;}
public function set url(value:String):void{_url = value;}
public function loadStyleDeclarations(url:String = null):void
{
if(!url || url == "") url = this.url;
if(!url || url == "") {throw new Error("No skin url found."); return;}
loader.load(new URLRequest(url));
}
private function onLoadComplete(e:Event):void
{
appDomain = loader.contentLoaderInfo.applicationDomain;
StyleManager.getInstance().dispatchEvent(new StyleEvent(StyleEvent.STYLE_COMPLETE));
}
private function onLoadError(e:Event):void
{
StyleManager.getInstance().dispatchEvent(new StyleEvent(StyleEvent.STYLE_ERROR));
}
public function getStyleDefinition(selector:String):DisplayObject
{
var s:Class;
try
{
s = appDomain.getDefinition(selector) as Class;
}
catch(err:Error){trace(err.message);}
if(s)
{
return new s as DisplayObject;
}
return null;
}
// Class Instance
private static var instance:StyleManager;
public function StyleManager(enforcer:SingletonEnforcer)
{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
}
public static function getInstance():StyleManager
{
if(StyleManager.instance == null)
{
StyleManager.instance = new StyleManager(new SingletonEnforcer());
}
return StyleManager.instance;
}
}
}
class SingletonEnforcer {}
