青瓷引擎使用心得——修改引擎的loading界面

一. 修改引擎的Loading界面之使用进度条显示
1. 双击打开引擎包中的lib/qc-loading-debug.js,如下图所示:

2. 只需要修改qici.init函数即可改变loading界面。
2.1 修改qici.init函数中的loadScript函数,该函数主要完成脚本加载功能,修改后的代码如下:

 1 // 加载脚本文件,其中qici.scripts.length为总的脚本长度
 2     function loadScript() {
 3
 4         var totalCount = qici.scripts.length + qici.loadingAssetCount || 0;
 5
 6         //所有的脚本已加载
 7         if (qici.loadIndex === qici.scripts.length ) {
 8
 9             qici.loadGame();
10
11             return;
12         }
13
14         //加载资源
15         else if (qici.loadIndex > qici.scripts.length && qici.loadIndex < totalCount)
16
17             return;
18         else if (qici.loadIndex >= totalCount)
19         {
20
21             qici.allAssetLoaded  = true;
22             return;
23         }
24
25         var src = qici.scripts[qici.loadIndex];
26
27         //创建script标签
28         var js = document.createElement(‘script‘);
29
30
31         js.onerror = function() {
32             console.log(‘Failed to load:‘, src);
33             qici.loadIndex++;
34             updateStep();
35             loadScript();
36         };
37
38         //脚本成功加载后的回调
39         js.onload = function () {
40             qici.loadIndex++;
41             updateStep();
42             loadScript();
43         };
44
45         //设置属性并添加
46         js.setAttribute(‘type‘, ‘text/javascript‘);
47         if (typeof src === ‘string‘) {
48             js.setAttribute(‘src‘, src);
49         }
50         else {
51             js.setAttribute(‘src‘, src[0]);
52             js.setAttribute(‘plugin_id‘, src[1]);
53         }
54         document.getElementsByTagName(‘head‘)[0].appendChild(js);
55     }

2.2 修改qici.init函数中的updateStep函数,该函数的功能是当脚本成功加载后将更新进度条的百分比,修改后的代码如下:

 1  //脚本成功加载后调用函数
 2    function updateStep(){
 3
 4         var totalCount = qici.scripts.length + qici.loadingAssetCount || 0;
 5         var percent = Math.floor(qici.loadIndex / totalCount * 100);
 6
 7         if(percent >= 100){
 8
 9             //加载成功后调用的函数
10             fading();
11         }
12
13         //进度条的宽度百分比
14         demo.style.width = percent + ‘%‘;
15
16         //用于显示进度条宽度的百分比
17         demo.innerHTML = percent + ‘%‘;
18
19    }

2.3 修改qici.init函数中的fading函数,该函数的功能是成功加载完成后,将loading界面的进度条移除,此时显示game界面,修改后的代码如下:

 1  function fading() {
 2
 3     var game = window[qici.config.gameInstance];
 4     loadState = ‘done‘;
 5
 6     //移除loading界面的进度条
 7     demo.parentNode.removeChild(demo);
 8
 9     //显示game界面
10     document.getElementById(‘gameDiv‘).style.display = ‘block‘;
11     delete game.state.loadingAnimation;
12     if (game.state.delayCreateCallback) {
13             game.state.delayCreateCallback();
14         }
15     if (!game.phaser.world)
16             return;
17
18     if (game.adjustGameSize) {
19             game.adjustGameSize(true);
20         }
21     else {
22             game.updateScale(true);
23         }
24     }

2.4 修改qici.init函数中的tick函数,tick函数中的requestAnimationFrame函数功能请百度,修改后的代码如下:

 1 function tick() {
 2
 3         //成功加载完成后就不执行requestAnimationFrame函数
 4         if (loadState === ‘done‘) {
 5             return;
 6         }
 7         requestAnimationFrame(tick);
 8         if (qici.hasAssetLoaded)
 9         {
10             qici.hasAssetLoaded = false;
11             loadScript();
12             updateStep();
13         }
14     }

2.5 添加自己所喜欢的loading界面,本范例使用进度条显示loading界面,代码如下:

1 document.write(‘<div  style="height=20px;width:80%;position:absolute;top:50%;left:10%;z-index:10000;background:#cccccc;">2 <div id="demo"style="opacity:0;width:0px;height:18px;background:red;color:black;">0%</div></div>‘);

3. 以下是qici.init完整函数,如下所示:

  1 //进入loading界面
  2 qici.init = function() {
  3
  4     var loadState = null;
  5
  6     //通过id获取元素用于显示loading界面
  7     var demo = document.getElementById("demo");
  8
  9     // 此时将游戏界面不显示
 10     document.getElementById(‘gameDiv‘).style.display = ‘none‘;
 11
 12     // 加载脚本文件,其中qici.scripts.length为总的脚本长度
 13     function loadScript() {
 14
 15         var totalCount = qici.scripts.length + qici.loadingAssetCount || 0;
 16         if (qici.loadIndex === qici.scripts.length ) {
 17
 18             qici.loadGame();
 19
 20             return;
 21         }
 22         else if (qici.loadIndex > qici.scripts.length && qici.loadIndex < totalCount)
 23
 24             return;
 25         else if (qici.loadIndex >= totalCount)
 26         {
 27
 28             qici.allAssetLoaded  = true;
 29             return;
 30         }
 31
 32         var src = qici.scripts[qici.loadIndex];
 33         var js = document.createElement(‘script‘);
 34
 35
 36         js.onerror = function() {
 37             console.log(‘Failed to load:‘, src);
 38             qici.loadIndex++;
 39             updateStep();
 40             loadScript();
 41         };
 42
 43         //脚本成功加载后的回调
 44         js.onload = function () {
 45             qici.loadIndex++;
 46             updateStep();
 47             loadScript();
 48         };
 49         js.setAttribute(‘type‘, ‘text/javascript‘);
 50         if (typeof src === ‘string‘) {
 51             js.setAttribute(‘src‘, src);
 52         }
 53         else {
 54             js.setAttribute(‘src‘, src[0]);
 55             js.setAttribute(‘plugin_id‘, src[1]);
 56         }
 57         document.getElementsByTagName(‘head‘)[0].appendChild(js);
 58     }
 59
 60    //脚本成功加载后调用函数
 61    function updateStep(){
 62
 63         var totalCount = qici.scripts.length + qici.loadingAssetCount || 0;
 64         var percent = Math.floor(qici.loadIndex / totalCount * 100);
 65         if(percent >= 100){
 66
 67             //加载成功后调用的函数
 68             fading();
 69         }
 70
 71         //进度条的宽度百分比
 72         demo.style.width = percent + ‘%‘;
 73
 74         //用于显示进度条宽度的百分比
 75         demo.innerHTML = percent + ‘%‘;
 76
 77    }
 78     function fading() {
 79
 80     var game = window[qici.config.gameInstance];
 81     loadState = ‘done‘;
 82
 83     //移除Loading界面的进度条
 84     demo.parentNode.removeChild(demo);
 85
 86     // 显示game界面
 87     document.getElementById(‘gameDiv‘).style.display = ‘block‘;
 88     delete game.state.loadingAnimation;
 89     if (game.state.delayCreateCallback) {
 90             game.state.delayCreateCallback();
 91         }
 92     if (!game.phaser.world)
 93             return;
 94
 95     if (game.adjustGameSize) {
 96             game.adjustGameSize(true);
 97         }
 98     else {
 99             game.updateScale(true);
100         }
101     }
102
103     function tick() {
104
105         //成功加载完成后就不执行requestAnimationFrame函数
106         if (loadState === ‘done‘) {
107             return;
108         }
109         requestAnimationFrame(tick);
110         if (qici.hasAssetLoaded)
111         {
112             qici.hasAssetLoaded = false;
113             loadScript();
114             updateStep();
115         }
116     }
117
118     demo.style.opacity = ‘1‘;
119     tick();
120     loadScript();
121     updateStep();
122 };

4. 运行时,效果图如下:

二、修改引擎Loading界面之使用gif动画
方法与前面所述的基本类似,需要说明的是部分代码需要作修改,需要修改的代码如下所示:

1 //update width
2    function updateStep(){
3         var totalCount = qici.scripts.length + qici.loadingAssetCount || 0;
4         var percent = qici.loadIndex / totalCount * 100;
5         if(percent >= 100){
6             fading();
7         }
8    }

loading界面显示代码如下:

1 document.write(‘2 <div style="height=200px;width:200px;position:absolute;top:20%;left:20%;z-index:10000;background:#cccccc;">3 <img id="demo" src="http://cdn.uehtml.com/201402/1 ... gt%3B4 </div>‘);

运行时,效果图如下:

相关阅读

开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!

时间: 2024-10-27 11:15:28

青瓷引擎使用心得——修改引擎的loading界面的相关文章

数据库存储引擎 show engines 修改引擎

mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+

MYSQL MYISAM引擎与INNODB引引擎的区别

MYISAM和INNODB是MYSQL数据库的两个主要引擎,MYISAM是MYSQL5.5版本之前的默认的引擎,而INNODB是MYSQL 5.5版本默认引擎. 两个引擎的区别如下: 事务处理 INNODB支持事务处理功能,事务具有以下4个属性,通常简称为事务的ACID属性. 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 一致性(Consisten):在事务开始和完成时,数据都必须保持一致状态.这意味着所有相关的数据规则都必须应用于事务的修

MySQL教程详解之存储引擎介绍及默认引擎设置

什么是存储引擎? 与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎.MySQL数据库在实际的工作中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成连接并且事先分析出SQL

什么是存储引擎以及不同存储引擎特点

以前一直玩Oracle数据库,整天围着业务需求和执行计划转,刚刚接触Mysql看到存储引擎不慎理解,相应会有与我相同人群存在,所以写文以记之. 首先简单从字面理解,想当是与磁盘打交道的,实际情况也是如此.一个数据库系统可以随意切换不同的存储引擎,也就是说随意选择写磁盘或操作磁盘的方式,觉得还是很牛掰的,所以这里看下Mysql的体系结构. MySQL服务器采用了多层设计和独立模块,插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中,图中的Pluggable Storage E

activiti学习3:流程引擎对象和流程引擎配置对象

目录 activiti学习3:流程引擎对象和流程引擎配置对象 一.activiti的简单使用流程 二.流程引擎配置对象ProcessEngineConfiguration的介绍 三.activiti配置文件的介绍 四.获取流程引擎配置对象 4.1 读取默认名称的配置文件来创建配置对象 4.2 读取自定义名称的配置文件来创建流程引擎配置对象 五.流程引擎对象 5.1 buildProcessEngine方法创建 5.2 用ProcessEngines类来获取 六.总结 activiti学习3:流程

Cocos Creator—定制H5游戏首页loading界面

Cocos Creator从1.0版本发布到现在也有一年多了,按理说一些常见的问题网上都有解决方案,例如"如何自定义首页加载进度条界面"这种普遍需求,应该所有人都会遇到的,因此也有完善的解决方案才对.我在网上搜了一些文章,虽然也有讨论的帖子,但是方案都不尽人意.因此只能再次自己动手丰衣足食了,在此我总结一下我的思路和策略,分享给大家,希望后来的人少走弯路,另外这里的方案只针对H5游戏发布,其他平台可以借鉴思路自己实现. 首页加载的loading界面,官网的文档并没有提及,我是通过构建发

10分钟,利用canvas画一个小的loading界面(顺便讨论下绘制效率问题)

首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" style="border: 1px solid #808080;display: block;margin: 100px auto;>你的游览器不支持canvas</canvas> 这里主要要说的就是宽高,不要在style里面定义,不然会被拉伸.(对于这点,建议大家看下W3c文档,不是很

10分钟,利用canvas画一个小的loading界面

首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" style="border: 1px solid #808080;display: block;margin: 100px auto;>你的游览器不支持canvas</canvas> 这里主要要说的就是宽高,不要在style里面定义,不然会被拉伸.(对于这点,建议大家看下W3c文档,不是很

cocos2d-x 3.6版loading界面

接着讲资源加载. 前面一节讲了怎么用一个图片创建一个背景.其实就是创建一个精灵.在cocos2d-x里面,背景,人物,道具,看到的许多对象其实都是一个精灵. 资源加载的时候通常会做一个loading的界面,告诉用户,现在在加载资源.当然有很多同学写教程,只写如何实现loading界面,怎么加载资源并没有写,这是不全面的. 我先讲如何完成一个loading界面. 把loading的图片放进工程,在Resources.h里面增加索引. 然后修改StartGame的init函数如下: bool Sta