11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2589|回复: 1
上一主题 下一主题

[★ AS3 引擎] 羔羊引擎之更换主题皮肤

[复制链接] TA的其它主题
发表于 2017-11-16 00:27:17 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 qq229449388 于 2017-11-21 00:08 编辑

先看效果


羔羊引擎已经问世,现在大家来认识一下,羔羊引擎入门第一步,启动羔羊引擎,很简单,一句话看下面
首先新建一个as3工程,如下

  1. package {
  2.     import GYLite.component.button.GYButton;
  3.     import GYLite.component.container.GYSprite;
  4.     import GYLite.component.scaleDisplay.ScaleMode;
  5.     import GYLite.component.text.GYText;
  6.     import GYLite.component.text.GYTextArea;

  7.     import flash.display.Sprite;
  8.     import flash.display.StageScaleMode;
  9.     import flash.events.Event;
  10.     import flash.events.MouseEvent;

  11.     import theme.Win7SkinTheme;

  12.     public class GYLiteAPI extends Sprite {
  13.         public
  14.         function GYLiteAPI() {
  15.             this.addEventListener(Event.ADDED_TO_STAGE, addToStage);
  16.         }
  17.         private
  18.         function addToStage(e: Event) : void {
  19.             this.removeEventListener(Event.ADDED_TO_STAGE, addToStage);
  20.             stage.scaleMode = StageScaleMode.NO_SCALE GYSprite.Init(stage, new Win7SkinTheme); // 启动羔羊引擎,只需一句话,问你怕不怕
  21.         }

  22.     }
  23. }
复制代码


可以看到上面,只需调用GYSprite的Init方法就可以启动,第一个参数很明显是stage舞台,第二个参数很明显主题,好吧,不是很明显,英语不好的人查一下,Theme是主题的意思。下面我们从主题开始说明一下,主题在羔羊引擎里面怎么用,首先主题类是通过实现接口ISkinTheme产生的,我们看看接口有哪些方法,打开ISkinTheme看看。

  1. <blockquote>public interface ISkinTheme
  2.         {
  3.                 function GetButtonSkin():IGYSkin;
  4.                 function GetTabButtonSkin():IGYSkin;
  5.                 function GetLinkButtonSkin():IGYSkin;
  6.                 function GetScrollBarSkinV():IGYSkin;
  7.                 function GetScrollBarSkinH():IGYSkin;
  8.                 function GetListSkin():IGYSkin;
  9.                 function GetTextInputSkin():IGYSkin;
  10.                 function GetCheckBoxSkin():IGYSkin;
  11.                 function GetRadioButtonSkin():IGYSkin;
  12.                 function GetProgressBarSkin():IGYSkin;
  13.                 function GetSliderSkin():IGYSkin;
  14.                 function GetTextTextFormat():TextFormat;
  15.                 function GetMenu():GYMenu;
  16.                 function GetComboBox():GYComboBox;
  17.                 function GetComboButtonSkin():IGYSkin;
  18.                 function GetMenuSkin():IGYSkin;
  19.                 function GetWindowSkin():IGYSkin;
  20.                 function GetTextAreaSkin():IGYSkin;
  21.                 function initRes():void;
  22.                 function getBmp(n:String):BitmapData;
  23.         
复制代码

可以看到基本上都是前面带Get的一些方法,这里所有的GetXXXXSkin,意思就是默认创建相应的组件时,内部会默认从这个方法里面提取皮肤,所以意味什么?没错了,就是换皮肤很简单啊,只需要实现这些接口,就可以换皮了。这些皮肤分别是哪些,我不多说了,查查字典,或者问问别人,其实GYSkinTheme主题类有注释,问我也可以。

注意里面有个initRes方法,就是初始化主题用的,当主题通过GYSprite.Init(stage, new Win7SkinTheme);方法传入,内部就会调用initRes方法初始化,想干些什么事情,随你便。getBmp方法没啥用,就是写给你玩玩的,你看着办吧。


可能光说接口,不明白具体怎么写,但是不要怕,羔羊引擎提供了一个GYSkinTheme的默认主题类,已经实现一遍这些接口,大家可以打开看看。因为代码比较长,我说明一下GetButtonSkin方法,其他大家举一反三。

  1. /**获得默认的按钮皮肤*/
  2.                 public function GetButtonSkin():IGYSkin
  3.                 {
  4.                         return new ButtonSkin(scaleBtnSkinVec,commonRect);
  5.                 }
复制代码

如上,这个方法就是返回一个ButtonSkin类实例,什么是ButtonSkin类?打开看看就知道啊,这里告诉大家一个规则,所有皮肤都是最基本要实现IGYSkin接口,或者说继承GYSkin类,而ButtonSkin当然是GYSkin的子类,除此之外,其他皮肤如CheckBoxSkin,RadioButtonSkin等也一样。具体内容看内部基本差不多,易学易懂。

在GYSkinTheme,除了GetXXXXSkin等方法,还有要求的initRes方法,还有一个setRes方法,这个方法就是设置一些图片资源,大家可能一眼就可以看到里面有一堆BitmapData,如下

  1.                 public var commonBtn_upBD:BitmapData;
  2.                 public var commonBtn_overBD:BitmapData;
  3.                 public var commonBtn_downBD:BitmapData;
  4.                 public var commonBtn_disabledBD:BitmapData;
  5.                 public var commonBtn_selUpBD:BitmapData;
  6.                 public var commonBtn_selOverBD:BitmapData;
  7.                 public var commonBtn_selDownBD:BitmapData;
  8.                 public var commonBtn_selDisabledBD:BitmapData;
  9.                 public var scaleBtn_upBD:BitmapData;
  10.                 public var scaleBtn_overBD:BitmapData;
  11.                 public var scaleBtn_downBD:BitmapData;
  12.                 public var scaleBtn_disabledBD:BitmapData;
复制代码

可以看到,就是把Embed的图片,创建出BitmapData直接赋值,不要问我Embed是什么。

说到这里,大家应该大概了解启动羔羊引擎,以及使用主题给羔羊引擎换皮肤了,这里有一个win7的皮肤,供大家参考,我们使用上面的工程(使用的就是win7的皮肤),创建个按钮和文本来看看。

  1. private function addToStage(e:Event):void
  2.                 {
  3.                         this.removeEventListener(Event.ADDED_TO_STAGE, addToStage);
  4.                         stage.scaleMode = StageScaleMode.NO_SCALE
  5.                         GYSprite.Init(stage, new Win7SkinTheme);
  6.                         initUI();
  7.                 }
  8.                 private function initUI():void
  9.                 {
  10.                         var btn:GYButton;
  11.                         btn = new GYButton;
  12.                         btn.width = 150;
  13.                         btn.height = 46;
  14.                         btn.label = &quot;创建一个按钮来玩玩\n点击我再创建一个文本&quot;;
  15.                         btn.onClick = createText;
  16.                         addChild(btn);
  17.                 }
  18.                 private function createText(e:MouseEvent):void
  19.                 {
  20.                         var t:GYTextArea = new GYTextArea;
  21.                         t.setPadding(5);
  22.                         t.vScroller.verticalPolicy = 1;
  23.                         t.x = 200;
  24.                         t.width = 200;
  25.                         t.height = 200;
  26.                         t.text = &quot;这个是TextArea组件,羔羊引擎就是这么简单!仿照Win7SkinTheme类,自己可以更换更多主题。&quot;;
  27.                         addChild(t);
  28.                 }
复制代码

还是刚刚那个工程,我们添加initUI和createText方法,initUI里创建一个按钮,GYButton就是基本的按钮组件,这里要说明一下,onClk是一个点击事件的回调函数接口,给大家提供一个方便,没什么事大家就不要写什么addEventListener了。



可以看到,直接new出来的GYButton和GYTextArea已经是win7的皮肤了,只需要Win7Theme一个主题类文件和准备皮肤的文件夹,这个win7的皮肤文件夹在工程目录的toolImg文件夹里面,大家可以下附件去看,是不是感到换皮是多轻松的一件事。

下一个教程我会给出更多内容,有兴趣或者想知道更多内容的,请联系以下
qq:229449388(加我请写上,羔羊引擎) 或者邮件 229449388@qq.com
欢迎加群讨论 371259465

lesson0.rar (2.7 MB, 下载次数: 16)

发表于 2021-5-6 15:56:29 | 显示全部楼层
大佬牛B
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表