一、非EUI方式
1、LoadingUI里的代码。
class LoadingUI extends egret.Sprite implements RES.PromiseTaskReporter {

public constructor() {
        super();        
        // 当被添加到舞台的时候触发 (被添加到舞台,说明资源组已经加载完成)
        this.addEventListener(egret.Event.ADDED_TO_STAGE,this.createView,this);
       
    }

private loadlable: egret.BitmapText;
    private loadImg: egret.Bitmap // loading图标
    private shape:egret.Shape = new egret.Shape();

private createView(): void {
        this.width=this.stage.stageWidth;
        this.height=this.stage.stageHeight;
        //背景色
        let bg:egret.Shape = this.shape;
        bg.graphics.beginFill(0x40BDC9);
        bg.graphics.drawRect(0, 0, this.width, this.height); 
        bg.graphics.endFill();
        this.addChild(this.shape);           
        // 加载位图字体
        this.loadlable = new egret.BitmapText();
        this.loadlable.font = RES.getRes("gameFonts_fnt");;
        this.loadlable.textAlign = "center";
        this.loadlable.verticalAlign = "middle";
        this.loadlable.width = 140;
        this.loadlable.height = 80;                                    
        this.loadlable.x = this.width / 2 - this.loadlable.width / 2;
        this.loadlable.y = this.height / 2 + this.loadlable.height / 2;
        this.addChild(this.loadlable);  
        // loading图标
        this.loadImg = new egret.Bitmap();
        this.loadImg.texture=RES.getRes("loader_png");                                
        this.loadImg.anchorOffsetX = this.loadImg.width / 2;
        this.loadImg.anchorOffsetY = this.loadImg.height / 2;
        this.loadImg.x = this.width / 2;
        this.loadImg.y = this.height / 2;
        this.addChild(this.loadImg);        
    }

public onProgress(current: number, total: number): void {
        // 计算百分比
        let per = Math.floor((current / total) * 100);
        this.loadlable.text = `${per}%`;
    }
}
2、main.ts里的代码没有变,但是loadResource方法里的加载顺序要搞清楚。核心关键点。
private async runGame() {
        RES.setMaxLoadingThread(1); //防加载卡死
        await this.loadResource();
        this.createGameScene();
    }

private async loadResource() {
        try {
            await RES.loadConfig("resource/default.res.json", "resource/");
            const loadingView = new LoadingUI();            
            //加载loading组
            await RES.loadGroup("loading");
            this.stage.addChild(loadingView);
            
            await this.loadTheme();
            await RES.loadGroup("preload", 0, loadingView);
            this.stage.removeChild(loadingView);
        }
        catch (e) {
            console.error(e);
        }
    }

 
二、EUI方式(main.ts的加载资源顺序和default.thm.json皮肤配置为核心关键)
1、LoadingUI源码:
class LoadingUI extends eui.Component {

public lblLoader: eui.BitmapLabel;

public constructor() {
        super();
        this.skinName = "resource/skins/LoadingSkin.exml";        
    }

public setProgress(current: number, total: number):void {
        // 计算百分比
        let per = Math.floor((current / total) * 100);
        this.lblLoader.text = `${per}%`;
    }

}

2、main.ts源码:
class Main extends eui.UILayer {

private loadingView: LoadingUI;

protected createChildren(): void {
        super.createChildren();

egret.lifecycle.addLifecycleListener((context) => {
            // custom lifecycle plugin
        })

egret.lifecycle.onPause = () => {
            egret.ticker.pause();
        }

egret.lifecycle.onResume = () => {
            egret.ticker.resume();
        }

//inject the custom material parser
        //注入自定义的素材解析器
        let assetAdapter = new AssetAdapter();
        egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
        egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());

//初始化Resource资源加载库
        RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
        RES.loadConfig("resource/default.res.json", "resource/");

/*this.runGame().catch(e => {
            console.log(e);
        })*/
    }

/**
     * 配置文件加载完成,开始预加载皮肤主题资源和preload资源组。
     * Loading of configuration file is complete, start to pre-load the theme configuration file and the preload resource group
     */
    private onConfigComplete(event:RES.ResourceEvent):void {
        RES.removeEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
        // load skin theme configuration file, you can manually modify the file. And replace the default skin.
        //加载皮肤主题配置文件,可以手动修改这个文件。替换默认皮肤。
        var theme = new eui.Theme("resource/default.thm.json", this.stage);
        theme.addEventListener(eui.UIEvent.COMPLETE, this.onThemeLoadComplete, this);

RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
        RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadError, this);
        RES.addEventListener(RES.ResourceEvent.ITEM_LOAD_ERROR, this.onItemLoadError, this);
        RES.loadGroup("loading");
    }
    private isThemeLoadEnd: boolean = false;
    /**
     * 主题文件加载完成,开始预加载
     */
    private onThemeLoadComplete(): void {
        this.isThemeLoadEnd = true;
        this.createScene();
    }
    private isResourceLoadEnd: boolean = false;
    /**
     * 资源组加载完成
     */
    private onResourceLoadComplete(event:RES.ResourceEvent):void {
        if (event.groupName == "loading") {
            RES.removeEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
            RES.removeEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadError, this);
            RES.removeEventListener(RES.ResourceEvent.ITEM_LOAD_ERROR, this.onItemLoadError, this);
            this.isResourceLoadEnd = true;
            this.createScene();
        }
        if(event.groupName == 'preload'){
            this.startCreateScene();
            this.stage.removeChild(this.loadingView);
        }
    }
    private createScene(){
        if(this.isThemeLoadEnd && this.isResourceLoadEnd){
            //设置加载进度界面
            this.loadingView = new LoadingUI();
            this.stage.addChild(this.loadingView);
            // 加载preload资源组
            RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE,this.onResourceLoadComplete,this);
            RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR,this.onResourceLoadError,this);
            RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS,this.onResourceProgress,this);
            RES.addEventListener(RES.ResourceEvent.ITEM_LOAD_ERROR,this.onItemLoadError,this);
            RES.loadGroup("preload");
        }
    }
    /**
     * 资源组加载出错
     *  The resource group loading failed
     */
    private onItemLoadError(event:RES.ResourceEvent):void {
        console.warn("Url:" + event.resItem.url + " has failed to load");
    }
    /**
     * 资源组加载出错
     */
    private onResourceLoadError(event:RES.ResourceEvent):void {
        //TODO
        console.warn("Group:" + event.groupName + " has failed to load");
        //忽略加载失败的项目
        this.onResourceLoadComplete(event);
    }
    /**
     * preload资源组加载进度
     */
    private onResourceProgress(event:RES.ResourceEvent):void {
        if (event.groupName == "preload") {
            this.loadingView.setProgress(event.itemsLoaded, event.itemsTotal);
        }
    }
    /**
     * 创建场景界面
     */
    protected startCreateScene(): void {
        console.log('start')
        this.playsc1();

}
    public sc1: eui.Component;
    protected playsc1():void{
        var sc1: eui.Component = new GameLogo();
        this.stage.addChild(sc1);
        this.sc1 = sc1;
    }    
}

3、default.thm.json
{
        "skins": {
                "eui.Button": "resource/eui_skins/ButtonSkin.exml",
                "eui.CheckBox": "resource/eui_skins/CheckBoxSkin.exml",
                "eui.HScrollBar": "resource/eui_skins/HScrollBarSkin.exml",
                "eui.HSlider": "resource/eui_skins/HSliderSkin.exml",
                "eui.Panel": "resource/eui_skins/PanelSkin.exml",
                "eui.TextInput": "resource/eui_skins/TextInputSkin.exml",
                "eui.ProgressBar": "resource/eui_skins/ProgressBarSkin.exml",
                "eui.RadioButton": "resource/eui_skins/RadioButtonSkin.exml",
                "eui.Scroller": "resource/eui_skins/ScrollerSkin.exml",
                "eui.ToggleSwitch": "resource/eui_skins/ToggleSwitchSkin.exml",
                "eui.VScrollBar": "resource/eui_skins/VScrollBarSkin.exml",
                "eui.VSlider": "resource/eui_skins/VSliderSkin.exml",
                "eui.ItemRenderer": "resource/eui_skins/ItemRendererSkin.exml",
                "LoadingUI": "resource/skins/LoadingSkin.exml",
                "GameLogo": "resource/skins/GameLogo.exml"
        },
        "autoGenerateExmlsList": true,
        "exmls": [
                "resource/eui_skins/ButtonSkin.exml",
                "resource/eui_skins/CheckBoxSkin.exml",
                "resource/eui_skins/HScrollBarSkin.exml",
                "resource/eui_skins/HSliderSkin.exml",
                "resource/eui_skins/ItemRendererSkin.exml",
                "resource/eui_skins/PanelSkin.exml",
                "resource/eui_skins/ProgressBarSkin.exml",
                "resource/eui_skins/RadioButtonSkin.exml",
                "resource/eui_skins/ScrollerSkin.exml",
                "resource/eui_skins/TextInputSkin.exml",
                "resource/eui_skins/ToggleSwitchSkin.exml",
                "resource/eui_skins/VScrollBarSkin.exml",
                "resource/eui_skins/VSliderSkin.exml",
                "resource/skins/GameLogo.exml",
                "resource/skins/LoadingSkin.exml"
        ],
        "path": "resource/default.thm.json"
}

Egret飞行模拟-开发记录03-LoadingUI界面的更多相关文章

  1. Egret飞行模拟-开发记录02

    1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...

  2. Egret飞行模拟-开发记录01

    1.项目结构简介 1.1 index.html:应用入口文件,我们可以在这里面配置项目的旋转缩放模式背景颜色等. 1.2 egretProperties.json:这个文件里面进行项目配置,包括模块和 ...

  3. 微信小程序-饮食日志_开发记录03

    这段时间主要是收尾阶段. 美化界面,排版分部等. 并进行上传,审核. 环境部署一直出现问题,所以测试版食物查找查找不到. 主要问题是:https://的网页证书没有通过审核. 所以现在推行开发,调试版 ...

  4. CozyRSS开发记录22-界面退化

    CozyRSS开发记录22-界面退化 1.问题1-HtmlTextBlock 找的这个HtmlTextBlock有很严重的bug,有时候显示不完全,有时候直接就崩了.然后看了下代码,完全是学生仔水平写 ...

  5. CozyRSS开发记录16-RssContentView显示

    CozyRSS开发记录16-RssContentView显示 1.RssContentView的布局和绑定 继续参照原型图来写xaml: 然后在RSSContentFrameViewModel里提供绑 ...

  6. CozyRSS开发记录15-获取和显示RSS内容

    CozyRSS开发记录15-获取和显示RSS内容 1.内容列表 我们先给RSSContentFrame增加一个ViewModel,里面和RSS源列表一样,提供一个ObservableCollectio ...

  7. CozyRSS开发记录14-RSS源管理初步完工

    CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...

  8. CozyRSS开发记录13-添加订阅的对话框

    CozyRSS开发记录13-添加订阅的对话框 1.设计对话框 首先,还是先用MockPlus来画个原型图: 因为用了MaterialDesignToolkit,那么可以很方便的有一个蒙层的效果. 2. ...

  9. CozyRSS开发记录2-酷炫的皮肤库

    CozyRSS开发记录2-酷炫的皮肤库 1.MaterialDesignToolkit 最开始微软推出Metro设计风格的时候,有人喜欢有人喷.紧接着,Ios也开始做扁平化的UI,这时候,扁平化已成为 ...

随机推荐

  1. Hive与HBase表联合使用Join的问题

    hive与hbase表结合级联查询的问题,主要hive两个表以上涉及到join操作,就会长时间卡住,查询日志也不报错,也不会出现mr的进度百分比显示,shell显示如下图 如图: 解决这个问题,需要修 ...

  2. 【Keil5 MDK】fromelf工具的基本用法(fromelf --help)

    ARM FromELF, 5.03 [Build 76] [MDK-ARM Standard] ARM image conversion utilityfromelf [options] input_ ...

  3. JavaScript原型链及继承

    在JavaScript中,所有的东西都是对象,但是JavaScript中的面向对象并不是面向类,而是面向原型的,这是与C++.Java等面向对象语言的区别,比较容易混淆,因此把我自己学习的过程记录下来 ...

  4. 首次使用AndroidStudio创建hello world遇到的坑!(Mac系统下)

    第一次用AS,且不说它SDK配置的琐碎,光建立第一个简单的HelloWorld项目的配置包问题就把我卡了一天.这个坑必须记录一下,

  5. Unity VS 创建脚本自动添加头注释-时间-描述-作者等信息

    Unity生成脚本自动添加头注释 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心 ...

  6. Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念

    本文系转载-原创@HollisChuang :http://www.hollischuang.com/archives/553 1.PO(persistant object) 持久对象   在 o/r ...

  7. Dart 创建List

    list的常用的操作 1. [] ,length  获取元素,和数组长度 2. add(), insert ()添加元素 3. remove(),clear() 删除元素 4.indexOf (), ...

  8. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  9. 《DSP using MATLAB》Problem 7.27

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  10. PY序

    Python实现机器学习依赖于两个类库——SciPy和scikit-learn 一)SciPy SciPy是数学运算的基本类库,在机器学习的过程中,主要运用NumPy.Matplotlib和Panda ...