为flash程序制作皮肤【皮肤映射类Skin】
来源:互联网 发布:园林工程预算软件 编辑:程序博客网 时间:2024/05/02 01:13
为flash程序制作皮肤【皮肤映射类Skin】
转载自http://www.wedoswf.com/posts?page=83skin类是一个为了更方便的访问皮肤中的对象而设计的类文件。
在flash中每次都要很麻烦的用getChildAt或getChildByName一层一层的来访问皮肤中的元件,这里设计了一种更简洁的方式来获得设计人员制作的flash文件中的元件或绑定类。
只要继承Skin类并作一些简单的设置就可以用$()方法直接获得某个ui元件,$c()获得某个绑定类,$u获得包含多个ui元件的ui模块。
我通过一个示例文件来详细讲述skin类中的几种用法。
示例文件从这里下载:skin-sample
我们先来看看示例皮肤文件中的类绑定截图
先用皮肤的文档类继承Skin类,skin类继承了Sprite类,所以不用担心文档类需要继承Sprite的问题
皮肤文件端:
package {import flash.display.Sprite;import com.monboo.skin.Skin;public class CatSkin extends Skin {public function CatSkin() {}}}
再在文档类的构造方法中定义皮肤中提供的对象。
通过三种方法定义皮肤中的对象
public function addClass(cl:Class,cName:String):void
addClass定义绑定类
public function addUI(cName:String,uName:String):void
addUI定义显示对象模块
public function addMap(mapName:String,path:String):void
addMap定义显示对象模块某层级的对象的访问映射
最后在加载皮肤的应用程序端访问皮肤中的对象:
/********** load skin*********/var albumSkin:Object;var __albumSkin:Class;var skinUrl:String="http://www.xncat.com/wp-content/uploads/2010/05/catSkin.swf";loadSkin();function loadSkin():void {var loadSkin:Loader = new Loader();var context:LoaderContext = new LoaderContext();context.checkPolicyFile=true;context.applicationDomain=new ApplicationDomain(ApplicationDomain.currentDomain);loadSkin.load(new URLRequest(skinUrl),context);loadSkin.contentLoaderInfo.addEventListener(Event.COMPLETE,skinLoadedFunc);}function skinLoadedFunc(e:Event):void {__albumSkin=e.target.applicationDomain.getDefinition("CatSkin") as Class;albumSkin = new __albumSkin();trace("[Skin loaded successfully!]");}
主要有三种访问皮肤内容的方法
1 . 访问皮肤中的类
例如我们要获得皮肤中的CtrlUI,PlayerBoxUI,ThumDrag,ThumbUI几个类,从而实现在皮肤文件加载完成后,可以方便的得到这些类的引用,这种情况适用方法1.
皮肤文件端:
public function addClass(cl:Class,cName:String)
cl:Class参数:在皮肤文件中的绑定类
cName:String参数:加载皮肤后获得这个绑定类的名称
addClass(ThumbUI,"ThumbUI");addClass(ThumbDrag,"ThumbDrag");addClass(CtrlUI,"CtrlUI");addClass(PlayerBoxUI,"PlayerBoxUI");
加载皮肤的应用程序端:
public function $c(cName:String):Class
cName:String参数:加载皮肤后获得这个绑定类的名称
var thumbDrag:Class = albumSkin.$c("ThumbDrag") as Class;var thumbUI:Class = albumSkin.$c("ThumbUI") as Class;var ctrlUI:Class = albumSkin.$c("CtrlUI") as Class;var playerBoxUI:Class = albumSkin.$c("PlayerBoxUI") as Class;
2 . 访问皮肤中的显示对象模块
比如我们要访问皮肤文件中一个实例化的显示模块volumeControl,它里面有比较复杂的显示对象层级,有比较多的按钮对象,我把为了方便把这个模块绑定成一个类,在应用程序端只需要获得这个模块实例,并addChild到显示列表中就行了。
皮肤文件端:
public function addUI(cName:String,uName:String):void
cName:String参数:加载皮肤后获得这个模块绑定类的名称
uName:String参数:在皮肤文件中模块的实例名
addClass(VolumeControl,"VolumeControl");addUI("VolumeControl","vControl");
加载皮肤的应用程序端:
public function $u(uName:String):Sprite{
uName:String参数:在皮肤文件中模块的实例名
addChild(albumSkin.$c("vControl"));
3 . 访问皮肤中的 显示对象模块中的某一个ui
当我们获得了某个显示对象模块后,如何访问它里面比较复杂的显示对象层级,就可以用到这第三种方法了。
皮肤文件端:
public function addMap(mapName:String,path:String):void
mapName:String参数:映射名,通过这个名称可以获得某一个层级的显示对象
path:String参数:映射路径,如vControl.volumUp.soundLine
addClass(VolumeControl,"VolumeControl");addUI("VolumeControl","vControl");addMap("soundLine","vControl.volumUp.soundLine");
加载皮肤的应用程序端:
public function $(mapName:String):Sprite
mapName:String参数:映射名,通过这个名称可以获得某一个层级的显示对象
var soundLine:Sprite = albumSkin.$("soundLine"));
注:
你可以把皮肤ui分离成一个独立的皮肤文件用于应用程序加载,也可以不分离把皮肤ui跟应用程序位于同一文件。如果是分离的话,你得在加载成功后的方法中获取皮肤中的对象,如果不分离的话,可以直接访问皮肤中的对象。
- 为flash程序制作皮肤【皮肤映射类Skin】
- Skin皮肤
- Libgdx之Skin 皮肤类
- Qt制作Skin(皮肤)总结
- Qt制作Skin(皮肤)总结
- Qt制作Skin(皮肤)总结
- flex皮肤制作工具—-Flex Skin Design Extension for Flash
- Skin++ VC6下给程序换皮肤
- 皮肤(Skin)--类继承关系
- (vc)模仿skin++皮肤
- SKIN++皮肤的使用
- DevExpress Skin 皮肤机理
- Flex4之皮肤定制【Skin类和Skin类】
- Flex4之皮肤定制【Skin类和Skin类】
- Flex4之皮肤定制【Skin类和Skin类】
- Flex皮肤制作教程——修改组件的Skin
- 【VC皮肤】skin++皮肤库使用
- vc应用程序皮肤应用skin++
- 基础知识 小记
- Java调试出现的问题记录
- 域名相关概念解释~~
- tip7: 一定要为类取具体的名字
- 俄罗斯方块程序
- 为flash程序制作皮肤【皮肤映射类Skin】
- PyDev 破解方法
- RLE 压缩算法
- C语言的那些小秘密之const修饰符
- tip8: 不要重复,如:mysql的目录名与库名
- 导出flashcs4中的fl.controls.*给flexsdk使用
- 查找单调递增子序列
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互锁,读写锁
- 以单词为单位进行的字符串翻转