zoukankan      html  css  js  c++  java
  • [feather]StarlingUi框架——初识feather、界面启动及Ui加载

    这个星期六星期天,一是完结上周遗留下来的事情,也就是用feather来做一个应用;二是将这周的3D知识好好的记录和汇总一下。

    feather初识:

    这是一个基于Starling的Ui框架集,Starling的效率让人毋庸置疑很适合移动平台,并且现在Starling的官方包也都默认整合feather的包下载,wiki百科上也能看到一些信息和教程。但是富于案例性质的整合案例没有,只有基本的组件代码示例,并且有些资料还都在给的example的源代码里面,以及最近汇总的很零散的别人的博客空间里面,官方教程上也没有很好的更新。上一周做了一个应用,涉及到了List,ScrollContainer,tabBar,Screen,ScreenNavigator,这些常用组件的使用,并且不可避免的得应用到渲染器,所以将这一个项目碰到的一些知识点,好好的总结一下,以备后用。

    feather知识点:

    最近总结下来,发现如果在学习一套新的Ui框架,有几个点是回避不了得,这是我自己总结的方面。希望能被多发现一些问题,以待后面补充学习。

    1、界面启动及资源加载

    2、Screen及Panel

    3、组件库使用及渲染器

    4、事件机制

    5、自定义组件

    6、自定义皮肤

    feather界面启动及资源加载:参官方压缩包里面自带的example,与官方命名规则略有不同)

    因为feather是基于Starling的,所以最初初始化参数信息做屏幕自适应等都与Starling一致,但是由于资源加载以及本身的机制造成MVC的脱离,有自己的一套结构。

    由于Starling在启动的时候,得等到资源全部加载完毕才会进入相应的界面。这一段加载资源的空白,是不能够留给用户的,所以在Main.as的启动时,就应当异步加载资源,先放一个默认界面。

    1、Main.as

    //欢迎页面背景
    [Embed(source="res/welcome.jpg")] public static var WelcomePic:Class;
            
    public function Main()
    {
                
        //调整对齐方式
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;
                //初始化宽高
        Constant.STAGE_WIDTH = stage.fullScreenWidth;
        Constant.STAGE_HEIGHT = stage.fullScreenHeight;
                //设置资源管理
        var assetsManager:AssetManager = new AssetManager();    
        //EmbeddedAsstes为所有图片资源通过Embed加载资源集合类 
        assetsManager.enqueue(EmbeddedAsstes);            
        var s:Starling = new Starling(Assets,stage);
        //设置长宽
        s.stage.stageWidth = Constant.STAGE_WIDTH;
        s.stage.stageHeight = Constant.STAGE_HEIGHT;   
        //关闭多点触控
        s.simulateMultitouch = false;
        //Stage3D渲染方法是否报告发生错误
        s.enableErrorChecking = false;
        //抗锯齿1~16 差别不大
        s.antiAliasing = 1;
        //显示FPS
        s.showStats = true;
        //调整帧率
        stage.frameRate = 60;
                
        var background:Bitmap = new WelcomePic();
        background.width  = Constant.STAGE_WIDTH;
        background.height = Constant.STAGE_HEIGHT;
        background.smoothing = true;
        addChild(background);
                
        //启动Assets类加载资源,在启动前先放一个默认页面background
        s.addEventListener(starling.events.Event.ROOT_CREATED, 
                function onRootCreated(event:Object, app:Assets):void
                {
                    //将监听移除,并将默认页面移除,并置空
                    s.removeEventListener(starling.events.Event.ROOT_CREATED, onRootCreated);
                    removeChild(background);
                    background = null;
                        
                    var bgTexture:Texture = Texture.fromEmbeddedAsset(WelcomePic);
                        
                    app.start(bgTexture,assetsManager);
                        
                    s.start();
                });
        }

    显示资源加载过程当中的默认页面,并且异步启动Assets资源加载代码如下,当完成资源加载之后再跳转到其他的界面。

    2、Assets.as

    private static var _mAssets:AssetManager;
            
    private var mActiveScene:Sprite;
            
    public function Assets(){}
    
    public function start(background:Texture,tassets:AssetManager):void{
                
        _mAssets = tassets;
                
        var image:Image = new Image(background);
        image.width = Constant.STAGE_WIDTH;
        image.height = Constant.STAGE_HEIGHT;
        this.addChild(image);
                
        tassets.loadQueue(function onProgress(ratio:Number):void
        {    
                    
            if (ratio == 1)
                Starling.juggler.delayCall(function():void{
                        image.removeFromParent(true);
                        showScene(Controller);
                            
                        // 官方例子推荐,最佳清理时间!
                           System.pauseForGCIfCollectionImminent(0);
                        System.gc();
                }, 3);//后一个参数3,为该函数执行的延迟时间也就是什么时候欢迎页结束
        });
    }
    //用于屏幕切换
    private function showScene(screen:Class):void
    {
        if (mActiveScene) mActiveScene.removeFromParent(true);
        mActiveScene = new screen();
        this.addChild(mActiveScene);
    }
    
    //获取mAssets,因为是静态的
    public static function get mAssets():AssetManager
    {
        return _mAssets;
    }

    如果你看到这一个函数了,那么欢迎页的代码算是完成了,并且资源也就加载完毕了,至于欢迎页结束进入的Controller.as这个类,则是我们的整个控制层,负责哪一个页面的展现和调配,一会儿再总结吧。

    上面并不是将自己的资源管理器定义为公开的静态函数,因为start方法,我们需要调用但是又不想将此函数静态的公开访问,通过get方法来在start函数中使用,这样也是一种有效的保护。感觉挺使用的一种方式。

  • 相关阅读:
    Nightwatch的介绍
    reduce的用法及实例
    什么是声明式渲染?
    H5自带的表单验证
    Flex弹性布局
    JS中的forEach,for in,for of和for的遍历优缺点及区别
    将博客搬至CSDN
    9 外观模式(Facade)
    8 代理模式(Proxy)
    7 装饰模式(Decorator)
  • 原文地址:https://www.cnblogs.com/flashbird/p/3388699.html
Copyright © 2011-2022 走看看