CocosCreator源码分析-main.js

定义的全局方法 boot

window.boot = function () {

var settings = window._CCSettings;

window._CCSettings = undefined;

var onProgress = null;

//通过解构 声明四个变量,分别为bundle 的名字,都是内置bundle

let { RESOURCES, INTERNAL, MAIN, START_SCENE } = cc.AssetManager.BuiltinBundleName;

//声明一个方法,控制加载进度条,

function setLoadingDisplay () {

// Loading splash scene

var splash = document.getElementById('splash');

var progressBar = splash.querySelector('.progress-bar span');

onProgress = function (finish, total) {

var percent = 100 * finish / total;

if (progressBar) {

progressBar.style.width = percent.toFixed(2) + '%';

}

};

splash.style.display = 'block';

progressBar.style.width = '0%';

cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {

splash.style.display = 'none';//加载完毕后隐藏

});

}

定义onStart

//在run起游戏后 调用onstart

var onStart = function () {

//对于 Apple 这种支持 Retina 显示的设备上默认进行优化,而其他类型设备默认不进行优化,

cc.view.enableRetina(true);

//设置当发现浏览器的尺寸改变时,是否自动调整 canvas 尺寸大小。

cc.view.resizeWithBrowserSize(true);

if (cc.sys.isBrowser) {

setLoadingDisplay();//浏览器的时候处理进度条

}

if (cc.sys.isMobile) {

if (settings.orientation === 'landscape') {//横屏

cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE);

}

else if (settings.orientation === 'portrait') {//竖屏

cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT);

}

// 下面几个平台移动端游戏会在移动端自动尝试进入全屏模式。

cc.view.enableAutoFullScreen([

cc.sys.BROWSER_TYPE_BAIDU,

cc.sys.BROWSER_TYPE_BAIDU_APP,

cc.sys.BROWSER_TYPE_WECHAT,

cc.sys.BROWSER_TYPE_MOBILE_QQ,

cc.sys.BROWSER_TYPE_MIUI,

].indexOf(cc.sys.browserType) < 0);

}//

// Limit downloading max concurrent task to 2,

// more tasks simultaneously may cause performance draw back on some android system / browsers.

// You can adjust the number based on your own test result, you have to set it before any loading process to take effect.

if (cc.sys.isBrowser && cc.sys.os === cc.sys.OS_ANDROID) {

//下载时的最大并发数

cc.assetManager.downloader.maxConcurrency = 2;

//下载时每帧可以启动的最大请求数

cc.assetManager.downloader.maxRequestsPerFrame = 2;

}

var launchScene = settings.launchScene;

var bundle = cc.assetManager.bundles.find(function (b) {

return b.getSceneInfo(launchScene);

});

//通过场景名称加载分包中的场景。

bundle.loadScene(launchScene, null, onProgress,

function (err, scene) {

if (!err) {

cc.director.runSceneImmediate(scene);

if (cc.sys.isBrowser) {

// show canvas

var canvas = document.getElementById('GameCanvas');

canvas.style.visibility = '';

var div = document.getElementById('GameDiv');

if (div) {

div.style.backgroundImage = '';

}

console.log('Success to load scene: ' + launchScene);

}

}

}

);

};

//游戏运行的各项参数

var option = {

id: 'GameCanvas',

debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR,//几种模式 具体下面详细说明

showFPS: settings.debug,//

frameRate: 60,

groupList: settings.groupList, 分组

collisionMatrix: settings.collisionMatrix, 分组可进行碰撞的配置

};

1. debugMode(debug 模式,但是在浏览器中这个选项会被忽略)                                <br/>

    *      "debugMode" 各种设置选项的意义。                                                  <br/>

    *          0 - 没有消息被打印出来。                                                      <br/>

    *          1 - cc.error,cc.assert,cc.warn,cc.log 将打印在 console 中。                 <br/>

    *          2 - cc.error,cc.assert,cc.warn 将打印在 console 中。                         <br/>

    *          3 - cc.error,cc.assert 将打印在 console 中。                                  <br/>

    *          4 - cc.error,cc.assert,cc.warn,cc.log 将打印在 canvas 中(仅适用于 web 端)。<br/>

    *          5 - cc.error,cc.assert,cc.warn 将打印在 canvas 中(仅适用于 web 端)。        <br/>

    *          6 - cc.error,cc.assert 将打印在 canvas 中(仅适用于 web 端)。                 <br/>

    * 2. showFPS(显示 FPS)                                                            <br/>

    *      当 showFPS 为 true 的时候界面的左下角将显示 fps 的信息,否则被隐藏。 

 * 4. frameRate (帧率)                                                              <br/>

    *      “frameRate” 设置想要的帧率你的游戏,但真正的FPS取决于你的游戏实现和运行环境。     <br/>

根据配置初始化 assetManager

cc.assetManager.init({

bundleVers: settings.bundleVers,

remoteBundles: settings.remoteBundles,

server: settings.server

});

//声明容器,存放内置bundle

let bundleRoot = [INTERNAL, MAIN];

settings.hasStartSceneBundle && bundleRoot.push(START_SCENE);

settings.hasResourcesBundle && bundleRoot.push(RESOURCES);

var count = 0;

function cb (err) {

if (err) return console.error(err.message, err.stack);

count++;

//第三步,内置bundle 加载完毕,

运行游戏,并且指定引擎配置和 onStart 的回调。

if (count === bundleRoot.length + 1) {

cc.game.run(option, onStart);

}

}

//第一步加载导入为插件的script

cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb);

第二步,加载内置的bundle

for (let i = 0; i < bundleRoot.length; i++) {

cc.assetManager.loadBundle(bundleRoot[i], cb);

}

};

if (window.jsb) {

var isRuntime = (typeof loadRuntime === 'function');

if (isRuntime) {

require('src/settings.js');

require('src/cocos2d-runtime.js');

if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {

require('src/physics.js');

}

require('jsb-adapter/engine/index.js');

}

else {

require('src/settings.js');

require('src/cocos2d-jsb.js');

if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {

require('src/physics.js');

}

require('jsb-adapter/jsb-engine.js');

}

/*

* 是否在将贴图上传至 GPU 之后删除原始图片缓存,删除之后图片将无法进行 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。

    * 在 Web 平台,你通常不需要开启这个选项,因为在 Web 平台 Image 对象所占用的内存很小。

    * 但是在微信小游戏平台的当前版本,Image 对象会缓存解码后的图片数据,它所占用的内存空间很大。

    * 所以我们在微信平台默认开启了这个选项,这样我们就可以在上传 GL 贴图之后立即释放 Image 对象的内存,避免过高的内存占用。

*/

cc.macro.CLEANUP_IMAGE_CACHE = true;

window.boot();

}

欢迎交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容