cocos creator 升级到3.x之后加载进度条取消了,测试了多个3.x版本最终以creator 3.6.3版本,构建了简单的进度加载
参考链接:
https://forum.cocos.org/t/topic/137113
打包web-mobile后,没有进度条。加载的时候只显示一个黑屏。 - Creator 3.x - Cocos中文社区
cocos creator 3.6.x 版本H5下 启动页做进度条加载 - 掘金
参考了多个实例,大部分之解决到了第一个场景的加载进度,但creater 中cc.js加载时还是会留下空白时间,所以做了个伪进度条,让进度更平滑
主要对以下文件修改

//------------------中间是新增加内容-----------------------
//-------------------end-----------------
- html {
- -ms-touch-action: none;
- }
-
- body, canvas, div {
- display: block;
- outline: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-
- user-select: none;
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- -khtml-user-select: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- }
-
- /* Remove spin of input type number */
- input::-webkit-outer-spin-button,
- input::-webkit-inner-spin-button {
- /* display: none; <- Crashes Chrome on hover */
- -webkit-appearance: none;
- margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
- }
-
- body {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- padding: 0;
- border: 0;
- margin: 0;
-
- cursor: default;
- color: #888;
- background-color: #333;
-
- text-align: center;
- font-family: Helvetica, Verdana, Arial, sans-serif;
-
- display: flex;
- flex-direction: column;
- }
-
- canvas {
- background-color: rgba(0, 0, 0, 0);
- }
-
- #GameDiv, #Cocos3dGameContainer, #GameCanvas {
- width: 100%;
- height: 100%;
- }
- /******************以下 进度条和logo **********/
- .progress-bar {
- background-color: #1a1a1a;
- position: absolute;
- left: 25%;
- top: 80%;
- height: 14px;
- padding: 5px;
- width: 50%;
- /*margin: 0 -175px; */
- border-radius: 5px;
- box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444;
- }
-
- .progress-bar span {
- display: block;
- height: 100%;
- border-radius: 3px;
- box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
- transition: width .4s ease-in-out;
- background-color: #34c2e3;
- }
-
- .stripes span {
- background-size: 30px 30px;
- background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%,
- transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%,
- transparent 75%, transparent);
-
- animation: animate-stripes 1s linear infinite;
- }
-
- #splash {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: #171717 url(./splash.png) no-repeat center;
- background-size: 45%;
- }
- /******************end**********/
- html>
- <html>
- <head>
- <meta charset="utf-8">
-
- <title>Cocos Creator | spidertitle>
-
-
- <meta name="viewport"
- content="width=device-width,user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1,minimal-ui=true"/>
-
-
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
- <meta name="format-detection" content="telephone=no">
-
-
- <meta name="renderer" content="webkit"/>
- <meta name="force-rendering" content="webkit"/>
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
- <meta name="msapplication-tap-highlight" content="no">
-
-
- <meta name="full-screen" content="yes"/>
- <meta name="x5-fullscreen" content="true"/>
- <meta name="360-fullscreen" content="true"/>
-
-
-
- <meta name="x5-page-mode" content="app">
-
-
-
-
- <link rel="stylesheet" type="text/css" href="style.css"/>
-
- head>
- <body>
- <div id="GameDiv" cc_exact_fit_screen="true">
- <div id="Cocos3dGameContainer">
- <canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="99">canvas>
- div>
- div>
-
- <div id="splash">
- <div class="progress-bar stripes">
- <span style="width: 0%">span>
- div>
- div>
-
-
- <script src="src/polyfills.bundle.js" charset="utf-8"> script>
-
- <script src="src/system.bundle.js" charset="utf-8"> script>
-
- <script src="src/import-map.json" type="systemjs-importmap" charset="utf-8"> script>
-
- <script>
- System.import('./index.js').catch(function(err) { console.error(err); })
- script>
- <script type="text/javascript">
- (function () {
- var splash = document.getElementById('splash');
- splash.style.display = 'block';
- })();
- script>
- body>
- html>
- System.register([], function (_export, _context) {
- "use strict";
-
- var cc, Application;
- //---------------计时函数 和更新进度函数--------------
- var percentJd=0;
- //每秒更新进度条
- var timer =setInterval(() => {
- const now = new Date();
- //console.log(now.toString());
- if (percentJd<90) {
- percentJd=percentJd+1;
- onProgress(percentJd);
- } else{
- clearInterval(timer);
- }
- }, 1000);
-
- //刷新ui 及进度
- function onProgress(percent){
- //用于手动跟新,比每秒进度大就更新
- if (percent>percentJd) {
- percentJd=percent;
- }
- var progressBar = splash.querySelector('.progress-bar span');
- // var percent = 100 * finish / total;
- if (progressBar) {
- progressBar.style.width = percent + '%';
- }
- }
- //---------------------------end-----------------
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
- return {
- setters: [],
- execute: function () {
- _export("Application", Application = /*#__PURE__*/function () {
- function Application() {
- _classCallCheck(this, Application);
-
- this.settingsPath = 'src/settings.json';
- this.showFPS = false;
- }
-
- _createClass(Application, [{
- key: "init",
- value: function init(engine) {
- cc = engine;
- cc.game.onPostBaseInitDelegate.add(this.onPostInitBase.bind(this));
- cc.game.onPostSubsystemInitDelegate.add(this.onPostSystemInit.bind(this));
- }
- }, {
- key: "onPostInitBase",
- value: function onPostInitBase() {// cc.settings.overrideSettings('assets', 'server', '');
- // do custom logic
- }
- }, {
- key: "onPostSystemInit",
- value: function onPostSystemInit() {// do custom logic
- }
- }, {
- key: "start",
- value: function start() {、
- //---------------手动更新进度条--------------
- //上面的其他函数中可以拆分更细致
- onProgress(50);,
- //game.init,初始化第一个场景,第一个场景比较大的话也会比较耗时,所以定在50%
- //----------------------------------------
- return cc.game.init({
- debugMode: false ? cc.DebugMode.INFO : cc.DebugMode.ERROR,
- settingsPath: this.settingsPath,
- overrideSettings: {
- // assets: {
- // preloadBundles: [{ bundle: 'main', version: 'xxx' }],
- // }
- profiling: {
- showFPS: this.showFPS
- }
- }
- }).then(function () {
- return cc.game.run();
- });
- }
- }]);
-
- return Application;
- }());
- }
- };
- });
- System.register(["./application.js"], function (_export, _context) {
- "use strict";
-
- var Application, canvas, $p, bcr, application;
-
- //------注册第一个场景 是否加载完成监听-----------------
- function setLoadingDisplay () {
- console.log('Engine is initialized');
- cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {
- console.log('game run over' );
- //关闭进度条显示
- splash.style.display = 'none';
- //关闭计时,但有时无效,未找到原因,有好的修改方案告知下
- if (application.timer) {
- clearInterval(application.timer);
- }
- });
- }
- //------ end-----------------
-
- function topLevelImport(url) {
- return System["import"](url);
- }
-
- return {
- setters: [function (_applicationJs) {
- Application = _applicationJs.Application;
- }],
- execute: function () {
- canvas = document.getElementById('GameCanvas');
- $p = canvas.parentElement;
- bcr = $p.getBoundingClientRect();
- canvas.width = bcr.width;
- canvas.height = bcr.height;
- application = new Application();
- topLevelImport('cc').then(function (engine) {
- //------cc 文件加载完后,添加监听-----------------
- setLoadingDisplay();
- //------end-----------------
- return application.init(engine);
- }).then(function () {
- return application.start();
- })["catch"](function (err) {
- console.error(err);
- });
- }
- };
- });

路劲:F:\cocos-dashboard-editors\3.6.3\resources\resources\3d\engine\templates\web-mobile
index.html-》index.ejs
- html>
- <html>
- <head>
- <meta charset="utf-8">
-
- <title><%= projectName %>title>
-
-
- <meta name="viewport"
- content="width=device-width,user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1,minimal-ui=true"/>
-
-
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
- <meta name="format-detection" content="telephone=no">
-
-
- <meta name="renderer" content="webkit"/>
- <meta name="force-rendering" content="webkit"/>
-
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
- <meta name="msapplication-tap-highlight" content="no">
-
-
- <meta name="full-screen" content="yes"/>
- <meta name="x5-fullscreen" content="true"/>
- <meta name="360-fullscreen" content="true"/>
-
-
-
- <meta name="x5-page-mode" content="app">
-
-
-
-
- <link rel="stylesheet" type="text/css" href="<%= cssUrl %>"/>
-
- head>
- <body>
- <div id="GameDiv" cc_exact_fit_screen="true">
- <div id="Cocos3dGameContainer">
- <canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="99">canvas>
- div>
- div>
- <div id="splash">
- <div class="progress-bar stripes">
- <span style="width: 0%">span>
- div>
- div>
- <%- include(cocosTemplate, {}) %>
-
- <script type="text/javascript">
- (function () {
-
- var splash = document.getElementById('splash');
- splash.style.display = 'block';
- })();
- script>
- body>
- html>
index.js-》index.js.ejs
- import { Application } from '<%= applicationJS %>';
-
- const canvas = document.getElementById('GameCanvas');
- const $p = canvas.parentElement;
- const bcr = $p.getBoundingClientRect();
- canvas.width = bcr.width;
- canvas.height = bcr.height;
-
- // 是否加载执行完成
- function setLoadingDisplay () {
- console.log('Engine is initialized');
- cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {
- console.log('game run over' );
- splash.style.display = 'none';
- if (application.timer) {
- clearInterval(application.timer);
- }
- });
- }
-
- function topLevelImport (url) {
- return System.import(url);
- }
-
- const application = new Application();
-
- topLevelImport('cc')
- .then((engine) => {
- //监听
- setLoadingDisplay();
- return application.init(engine);
- }).then(() => {
- return application.start();
- }).catch((err) => {
- console.error(err);
- });
style.css
- html {
- -ms-touch-action: none;
- }
-
- body, canvas, div {
- display: block;
- outline: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-
- user-select: none;
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- -khtml-user-select: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- }
-
- /* Remove spin of input type number */
- input::-webkit-outer-spin-button,
- input::-webkit-inner-spin-button {
- /* display: none; <- Crashes Chrome on hover */
- -webkit-appearance: none;
- margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
- }
-
- body {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- padding: 0;
- border: 0;
- margin: 0;
-
- cursor: default;
- color: #888;
- background-color: #333;
-
- text-align: center;
- font-family: Helvetica, Verdana, Arial, sans-serif;
-
- display: flex;
- flex-direction: column;
- }
-
- canvas {
- background-color: rgba(0, 0, 0, 0);
- }
-
- #GameDiv, #Cocos3dGameContainer, #GameCanvas {
- width: 100%;
- height: 100%;
- }
- /********************进度条********************/
- .progress-bar {
- background-color: #1a1a1a;
- position: absolute;
- left: 25%;
- top: 80%;
- height: 14px;
- padding: 5px;
- width: 50%;
- /*margin: 0 -175px; */
- border-radius: 5px;
- box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444;
- }
-
- .progress-bar span {
- display: block;
- height: 100%;
- border-radius: 3px;
- box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
- transition: width .4s ease-in-out;
- background-color: #34c2e3;
- }
-
- .stripes span {
- background-size: 30px 30px;
- background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%,
- transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%,
- transparent 75%, transparent);
-
- animation: animate-stripes 1s linear infinite;
- }
-
- #splash {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: #171717 url(./splash.png) no-repeat center;
- background-size: 45%;
- }
application.js-》application.ejs
F:\cocos-dashboard-editors\3.6.3\resources\resources\3d\engine\templates\launcher
- <%- include(versionCheckTemplate, { version: '1.0.0'}) %>
- let cc;
-
- //---------------自动 updata Progress--------------
- var percentJd=0;
- var timer =setInterval(() => {
- const now = new Date();
- //console.log(now.toString());
- if (percentJd<90) {
- percentJd=percentJd+1;
- onProgress(percentJd);
- } else{
- clearInterval(timer);
- }
- }, 1000);
-
- function onProgress(percent){
- if (percent>percentJd) {
- percentJd=percent;
- }
- var progressBar = splash.querySelector('.progress-bar span');
- // var percent = 100 * finish / total;
- if (progressBar) {
- progressBar.style.width = percent + '%';
- }
- }
- //------------end-----------------
-
- export class Application {
- constructor () {
- this.settingsPath = '<%= settingsJsonPath %>';
- this.showFPS = <%= showFPS %>;
- }
-
-
-
- init (engine) {
- cc = engine;
- cc.game.onPostBaseInitDelegate.add(this.onPostInitBase.bind(this));
- cc.game.onPostSubsystemInitDelegate.add(this.onPostSystemInit.bind(this));
- }
-
- onPostInitBase () {
- // cc.settings.overrideSettings('assets', 'server', '');
- // do custom logic
- }
-
- onPostSystemInit () {
- // do custom logic
- }
-
- start () {
- // 手动更新
- onProgress(50);
- return cc.game.init({
- debugMode: <%= debugMode %> ? cc.DebugMode.INFO : cc.DebugMode.ERROR,
- settingsPath: this.settingsPath,
- overrideSettings: {
- // assets: {
- // preloadBundles: [{ bundle: 'main', version: 'xxx' }],
- // }
- profiling: {
- showFPS: this.showFPS,
- }
- }
- }).then(() => cc.game.run());
- }
- }