(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()作为返回唯一的实例对象,并且可以对该实例进行全局访问。