>>设计要点
外部皮肤(swf)的动态加载 + swf中皮肤类的动态实例化(反射) + 事件广播机制
>>技术实现要点:皮肤swf的制作
创建swc工程,然后对swc文件进行解压缩,得到library.swf,将其更名,以备使用。
*该swf文件的特点是没有文档类(可执行程序入口),是纯粹的“功能类库”。
目前还没有找到可以直接生成该类型文件的IDE。
>>原型示例代码
1. 皮肤swf: 1.swf
package
{
public class Class1
{
public function sum():int{
return 1;
}
}
}
2. 皮肤swf: 2.swf
package
{
public class Class1
{
public function sum():int{
return 2;
}
}
}
3. 动态载入皮肤并切换皮肤的可执行程序
在stage上点击鼠标,画面上显示文字将在"1"和"2"之间切换。
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.text.TextField;
public class Main extends Sprite
{
public var loader:Loader = new Loader();
public var txt:TextField = new TextField();
public var swfName:String = "1.swf";
public function Main():void
{
addChild(txt);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
stage.addEventListener(MouseEvent.CLICK, mouseClick);
}
private function mouseClick(e:Event):void
{
var url:URLRequest = new URLRequest(swfName);
loader.load(url);
if (swfName == "1.swf")
{
swfName = "2.swf";
}else {
swfName = "1.swf";
}
}
private function loadComplete(e:Event):void
{
var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("Class1") as Class;
var obj:Object = new cls();
txt.text = obj.sum();
}
}
}