效果示例

主要源码如下:

package
{
	import feathers.controls.Alert;
	import feathers.controls.Application;
	import feathers.controls.Button;
	import feathers.controls.LayoutGroup;
	import feathers.core.PopUpManager;
	import feathers.data.ArrayCollection;
	import feathers.events.ButtonBarEvent;
	import feathers.events.TriggerEvent;
	import feathers.layout.HorizontalLayout;
	import feathers.layout.VerticalLayout;

	import flash.display.Loader;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.media.Sound;
	import flash.system.ApplicationDomain;
	import flash.utils.ByteArray;

	public class EmbedRes extends Application
	{

		[Embed(source="res/sound.mp3")]
		private static var SoundRes:Class;

		[Embed(source="res/photo.png")]
		private static var PhotoRes:Class;

		[Embed(source="res/game.swf",mimeType="application/octet-stream")]
		private static var GameRes:Class;

		[Embed(source="res/EmbedResLib.swf",mimeType="application/octet-stream")]
		private static var ResLib:Class;

		[Embed(source="res/FlaLib.swf",mimeType="application/octet-stream")]
		private static var FlaLib:Class;

		private var container:LayoutGroup;
		private var gameLoader:Loader;
		private var resLibDomain:ApplicationDomain;
		private var flaLibDomain:ApplicationDomain;

		public function EmbedRes()
		{
			super();
			haxe.initSwc(null);

			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;

			buildUI();
		}

		private function buildUI():void{
			var rootLayout:VerticalLayout = new VerticalLayout();
			rootLayout.paddingLeft = 10;
			rootLayout.paddingTop = 10;
			rootLayout.paddingRight = 10;
			rootLayout.paddingBottom = 10;
			rootLayout.gap = 10;
			var root:LayoutGroup = new LayoutGroup();
			root.layout = rootLayout;
			addChild(root);

			var buttonBarLayout:HorizontalLayout = new HorizontalLayout();
			buttonBarLayout.gap = 10;
			var buttonBar:LayoutGroup = new LayoutGroup();
			buttonBar.layout = buttonBarLayout;
			root.addChild(buttonBar);

			container = new LayoutGroup();
			root.addChild(container);

			var btn:Button = new Button("Play sound");
			btn.addEventListener(TriggerEvent.TRIGGER,playSoundBtnClicked);
			buttonBar.addChild(btn);

			btn = new Button("Show photo");
			btn.addEventListener(TriggerEvent.TRIGGER,showPhotoBtnClicked);
			buttonBar.addChild(btn);

			btn = new Button("Play SWF game");
			btn.addEventListener(TriggerEvent.TRIGGER,showGameSwfBtnClicked);
			buttonBar.addChild(btn);

			btn = new Button("SWF Dll");
			btn.addEventListener(TriggerEvent.TRIGGER,useSwfDllBtnClicked);
			buttonBar.addChild(btn);
			
			btn = new Button("Fla Res");
			btn.addEventListener(TriggerEvent.TRIGGER,useFlaSwfBtnClicked);
			buttonBar.addChild(btn);
		}

		private function playSoundBtnClicked(event:TriggerEvent):void{
			(new SoundRes() as Sound).play();
		}

		private function showPhotoBtnClicked(event:TriggerEvent):void{
			clearContainer();
			container.addChild(new PhotoRes());
		}

		private function showGameSwfBtnClicked(event:TriggerEvent):void{
			clearContainer();

			gameLoader = new Loader();
			gameLoader.loadBytes(new GameRes());
			container.addChild(gameLoader);
		}

		private function clearContainer():void{
			if(gameLoader){			
				gameLoader.unload();	
				gameLoader.unloadAndStop();
				if(gameLoader.parent){
					gameLoader.parent.removeChild(gameLoader);
				}
				gameLoader = null;
			}
			container.removeChildren();
		}

		private function useSwfDllBtnClicked(e:TriggerEvent):void{
			if(resLibDomain){
				showStringFromResLib(resLibDomain);
			}else{
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{
					resLibDomain = loader.contentLoaderInfo.applicationDomain;
					showStringFromResLib(resLibDomain);
				});
				var bytes:ByteArray = new ResLib();
				loader.loadBytes(bytes);
			}
		}

		private function showStringFromResLib(resLibDomain:ApplicationDomain):void{
			var Hello:* = resLibDomain.getDefinition("top.yunp.Hello");
			var h:* = new Hello();

			var alert:Alert = new Alert(h.sayHello("ActionScript"));
			alert.titleText="Definition in SWF Dll";
			alert.buttonsDataProvider = new ArrayCollection(["OK"]);
			alert.addEventListener(ButtonBarEvent.ITEM_TRIGGER,function(e:*):void{
				PopUpManager.removePopUp(alert);
			});
			PopUpManager.addPopUp(alert,this);
		}

		private function useFlaSwfBtnClicked(e:*):void{
			clearContainer();

			if(flaLibDomain){
				showFlaLibRes(flaLibDomain);
			}else{
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:*):void{
					flaLibDomain = loader.contentLoaderInfo.applicationDomain;
					showFlaLibRes(flaLibDomain);
				});
				loader.loadBytes(new FlaLib());
			}
		}

		private function showFlaLibRes(domain:ApplicationDomain):void{
			clearContainer();

			var BlueRect:* = domain.getDefinition("BlueRect");
			var r:* = new BlueRect();
			container.addChild(r);
		}
	}
}