zoukankan      html  css  js  c++  java
  • feathers ui 实现机制深入解析

    一,介绍:

    Feathers是轻量级,易于定制皮肤和扩展的UI组件(适用于移动设备和桌面)。Feathers通过Starling框架,利用GPU的强大能力渲染组件,来实现更加平滑和友好的体验。现在成为Adobe支持的类库!

    用途:通过GPU图形加速渲染,得到更好的用户体验,适合应用于PC FLASH游戏平台游戏移值到手机游戏中。

    二,主要结构

    Feathers提供了主要的类库与主要方法如图

    三,详细介绍主要实现机制和类:

    1,DisplayListWatcher-核心的类

    重要的方法:
    public function setInitializerForClass(type:Class, initializer:Function, withName:String = null):void

    通过这个方法把类名做为KEY ,方法函数做为值,存入_initializerNoNameTypeMap:Dictionary = new Dictionary(true);(这里有两个字典,一个是带名字参数的,与不带名字参数的)


    渲染实现过程:
    监听
    this.root.addEventListener(Event.ADDED, addedHandler);

    然后,通过判断 事件目标对象的类型(Class)为KEY,从Dictionary中找到预先存入的function进行调用。(function一般绑定texture)

    2,CustomTheme 自定义主题皮肤:override protected function initialize():void

    主要实现过程如下:

    //解析图片textrue
    const atlasBitmapData:BitmapData = (new ATLAS_IMAGE()).bitmapData;
    this.atlas = new TextureAtlas(Texture.fromBitmapData(atlasBitmapData, false), XML(new ATLAS_XML()));

    this.defaultTexture =this.atlas.getTexture("hslider-thumb-up-skin");

    调用父类的方法进行绑定
    this.setInitializerForClass(Button, buttonInitializer);


    //buttonInitializer中给相应的组件类设置主题属性
    button.defaultSkin =defaultTexture ;

    3,UIcomponent自定组件实现类

      3.1声明属性,CustomTheme中为对其进行设值defaultSkin:Texture

      3.2 override protected function initialize():void-初始化相应操作数据

      3.3  重绘方法override protected function draw():void

        1,得到 Invalidation flag (用来通知组件发生了什么改变进行区分,FeathersControl中已经提供了一些定义),当改变组件属性时,需要调用父类的            this.invalidate(INVALIDATION_FLAG_SIZE);进行通知。
         FeathersControl监听invalidate方法,已经验证是否需要重新调用draw()方法进行重绘。

        2,根据flag进行判断,需要重绘哪些部分


        3,最后进行排版布局

     还可以参考我写的另个一篇,有详细的代码:

    feathers ui 换肤

    http://www.cnblogs.com/tankaixiong/archive/2013/01/05/2845165.html

     
     
     
  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2851938.html
Copyright © 2011-2022 走看看