(7)新建3個影片剪輯,分別命名為Hours、Minutes和Seconds,然后分別在對應的影片剪輯中繪制出如圖12-8所示時針、分針和秒針。
圖12-8 繪制表秒針
Part 2 輸入控制程序
(1)切換到“庫”面板,然后分別為4個影片剪輯添加元件類,如圖12-9所示。
圖12-9 添加元件類
技巧與提示:
在前面步驟中只創建了4個影片剪輯元件,它們只存在于“庫”面板中,當發布成swf文件時,此時查看swf文件則為空,因為沒有編寫任何程序來進行引用和控制,就相當于該swf文件中只包含4個元件類,下面將通過加載該swf文件來引用和創建其元件類實例。
(2)新建一個ActionScript文件,并將其保存為SkinManager,然后編寫出加載皮膚的管理類程序。
AS3代碼
var skin_mc:SkinManager = SkinManager.getInstance(); skin_mc.loadSkin("skin/01.swf"); skin_mc.addEventListener("skincomplete",completeHandler); function completeHandler(e:Event) { var class_name:String = "Bg"; var _class:Class = skin_mc.getClass(class_name); var new_sprite:Sprite = new _class(); addChild(new_sprite); } |
AS3代碼
/** * 該類為皮膚加載管理類 * @author lbynet * @version 0.1 */ package { import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; import flash.events.EventDispatcher; public class SkinManager extends EventDispatcher { public static const SKINCOMPLETE:String="skincomplete"; private static var instance:SkinManager=new SkinManager(); public var loader:Loader; public function SkinManager() { if (instance != null) { throw new Error("不能直接創建對象"); } loader=new Loader(); } public static function getInstance():SkinManager { return instance; } public function loadSkin(path:String):void { loader.load(new URLRequest(path)); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); } private function completeHandler(e:Event) { //移除偵聽器 loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeHandler); dispatchEvent(new Event(SkinManager.SKINCOMPLETE));//發布事件 } public function getClass(className:String):Class { try { return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; } catch (e:Error) { throw new Error(className + " definition not found in " + e.toString()); } return null; } } } |
技術看板:關于SkinManager類涉及到的難點
有一定編程基礎的用戶很容易看出該類使用了很常用的“設計模式”中的單件模式,通過提供該類公有的靜態方法getInstance()作為返回唯一的實例對象,并且可以對該實例進行全局訪問。