Egret飞行模拟-开发记录03-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);
}
}
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界面的更多相关文章
- Egret飞行模拟-开发记录02
1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...
- Egret飞行模拟-开发记录01
1.项目结构简介 1.1 index.html:应用入口文件,我们可以在这里面配置项目的旋转缩放模式背景颜色等. 1.2 egretProperties.json:这个文件里面进行项目配置,包括模块和 ...
- 微信小程序-饮食日志_开发记录03
这段时间主要是收尾阶段. 美化界面,排版分部等. 并进行上传,审核. 环境部署一直出现问题,所以测试版食物查找查找不到. 主要问题是:https://的网页证书没有通过审核. 所以现在推行开发,调试版 ...
- CozyRSS开发记录22-界面退化
CozyRSS开发记录22-界面退化 1.问题1-HtmlTextBlock 找的这个HtmlTextBlock有很严重的bug,有时候显示不完全,有时候直接就崩了.然后看了下代码,完全是学生仔水平写 ...
- CozyRSS开发记录16-RssContentView显示
CozyRSS开发记录16-RssContentView显示 1.RssContentView的布局和绑定 继续参照原型图来写xaml: 然后在RSSContentFrameViewModel里提供绑 ...
- CozyRSS开发记录15-获取和显示RSS内容
CozyRSS开发记录15-获取和显示RSS内容 1.内容列表 我们先给RSSContentFrame增加一个ViewModel,里面和RSS源列表一样,提供一个ObservableCollectio ...
- CozyRSS开发记录14-RSS源管理初步完工
CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...
- CozyRSS开发记录13-添加订阅的对话框
CozyRSS开发记录13-添加订阅的对话框 1.设计对话框 首先,还是先用MockPlus来画个原型图: 因为用了MaterialDesignToolkit,那么可以很方便的有一个蒙层的效果. 2. ...
- CozyRSS开发记录2-酷炫的皮肤库
CozyRSS开发记录2-酷炫的皮肤库 1.MaterialDesignToolkit 最开始微软推出Metro设计风格的时候,有人喜欢有人喷.紧接着,Ios也开始做扁平化的UI,这时候,扁平化已成为 ...
随机推荐
- git教程:版本退回
转载:版本回退 现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control ...
- 2017年java面试题库【归类篇】
一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. ...
- WEBBASE篇: 第十一篇, JavaScript知识6
JavaScript 知识6 一, String 对象 1,分隔字符串, 函数: split(seperator) 作用: 将字符串,通过seperator 拆分成一个数组: eg: var msg= ...
- nodejs故障cnpm没反应
莫名发生的故障cnpm没反应 重新整理nodejs使用流程 方案1 1.安装64位nodejs 2.设置代理 npm config set proxy http://127.0.0.1:9999 ...
- 使用ueditor配置后台接口
因为后台是java,所以针对的是jsp版本的ueditor. 工程中需要导入jsp目录lib下的jar包.如果是maven管理的工程,可以导入jar包. 上传图片的功能的话,需要后台配置正确.如果需要 ...
- UCloud数据盘扩容步骤
1. 扩容目的 由于服务器数据盘存储空间不足导致系统无法正常的.为了彻底解决此问题,我们需要对服务器数据盘进行扩容. 2. 扩容步骤 2.1. 关机(如下图) 2.2. 创建快照(如下图) 2 ...
- XML注入(XXE)
XML所有元素都必须要有一个结束标志 大小写敏感 所有元素嵌套必须正确 所有的XML文档都必须要有一个根标志 XML包括XML声明,DTD文档类型定义(可选),文档元素 DTD即文档类型定义,用来为X ...
- 第六章Django
web应用程序 server端建立socket,不断地accept,当收到客户端连接信号之后,服务端向客户端发送数据,将html网页打开,read出来,并发送至客户端,这样客户端就可以浏览到网页的内容 ...
- 改变一下主要发博的方向吧...转scratch!
因为expression2实在是没什么好说的,BUI,水滴鱼大佬还有其他贴吧上的大佬,实在是多得不行,我一个小人物也说不了什么,然而scratch我却可以多发发脚本,思路,美工啊等等.所以以后我就主要 ...
- Go 包管理工具--glide
网上有一篇解释glide比较好的文章:https://my.oschina.net/u/553243/blog/1475626 在命令行中输入glide $glide NAME: glide - Ve ...