深入解析CocosCreator核心源码:揭秘游戏开发奥秘

更新:11-23 名人轶事 我要投稿 纠错 投诉

大家好,关于深入解析CocosCreator核心源码:揭秘游戏开发奥秘很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!

varsettings=window._CCSettings;

窗口._CCSettings=未定义;

varonProgress=null;

//通过解构声明四个变量,分别是bundle的名称。它们都是内置捆绑包。

让{ 资源,内部,主要,START_SCENE }=cc.AssetManager.BuiltinBundleName;

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

函数集加载显示() {

//加载启动场景

varsplash=document.getElementById("splash");

varprogressBar=splash.querySelector(".进度条跨度");

onProgress=函数(完成,总计){

varpercent=100* 完成/总计;

如果(进度条){

ProgressBar.style.width=%.toFixed(2) +"%";

}

};

splash.style.display="块";

ProgressBar.style.width="0%";

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

splash.style.display="none";//加载完成后隐藏

});

}

定义onStart

//运行游戏后调用onstart

varonStart=函数() {

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

cc.view.enableRetina(true);

//设置当发现浏览器尺寸变化时是否自动调整画布尺寸。

cc.view.resizeWithBrowserSize(true);

if(cc.sys.isBrowser) {

setLoadingDisplay();//使用浏览器时处理进度条

}

如果(cc.sys.isMobile){

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

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

}

elseif(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);

}//

//将下载最大并发任务数限制为2,

//同时执行更多任务可能会导致某些Android 系统/浏览器的性能下降。

//您可以根据自己的测试结果调整该数字,您必须在任何加载过程之前设置它才能生效。

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

//最大并发下载数

cc.assetManager.downloader.maxConcurrency=2;

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

cc.assetManager.downloader.maxRequestsPerFrame=2;

}

varlaunchScene=设置.launchScene;

varbundle=cc.assetManager.bundles.find(函数(b) {

returnb.getSceneInfo(launchScene);

});

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

Bundle.loadScene(launchScene,null, onProgress,

函数(错误,场景){

如果(!错误){

cc.director.runSceneImmediate(场景);

if(cc.sys.isBrowser) {

//显示画布

varcanvas=document.getElementById("GameCanvas");

canvas.style.visibility="";

vardiv=document.getElementById("GameDiv");

如果(div){

div.style.backgroundImage="";

}

console.log("场景:加载成功"+ launchScene);

}

}

}

);

};

//游戏运行的各种参数

变量选项={

id:"游戏画布",

debugMode: 设置.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR,//下面详细介绍几种模式

showFPS: settings.debug,//

帧率:60,

groupList: 设置.groupList,分组

碰撞Matrix:设置.collisionMatrix,分组可以配置碰撞

};

1.debugMode(调试模式,但该选项在浏览器中会被忽略)

* "debugMode" 各种设置选项的含义。

* 0 - 不打印消息。

*1 - cc.error、cc.assert、cc.warn、cc.log 将打印在控制台中。

*2 - cc.error、cc.assert、cc.warn 将打印在控制台中。

*3 - cc.error、cc.assert 将打印在控制台中。

*4 - cc.error、cc.assert、cc.warn、cc.log 将打印在画布上(仅适用于网页端)。

*5 - cc.error、cc.assert、cc.warn 将打印在画布上(仅适用于网页端)。

*6 - cc.error、cc.assert 将打印在画布上(仅适用于网页端)。

* 2.showFPS(显示FPS)

* 当showFPS为true时,fps信息会显示在界面左下角,否则隐藏。

* 4.frameRate(帧率)

*“frameRate”设置您的游戏所需的帧速率,但真正的FPS 取决于您的游戏实现和运行环境。

根据配置初始化assetManager

cc.assetManager.init({

BundleVers: 设置.bundleVers,

remoteBundles: 设置.remoteBundles,

server: 设置.server

});

//声明用于存储内置bundle的容器

letbundleRoot=[内部,主要];

settings.hasStartSceneBundle bundleRoot.push(START_SCENE);

settings.hasResourcesBundle bundleRoot.push(RESOURCES);

变量计数=0;

函数cb(错误){

if(err)returnconsole.error(err.message, err.stack);

计数++;

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

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

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

cc.game.run(选项, onStart);

}

}

//第一步是加载作为插件导入的脚本。

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

第二步加载内置bundle

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

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

}

};

if(window.jsb) {

varisRuntime=(typeofloadRuntime==="函数");

if(isRuntime) {

需要("src/settings.js");

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

如果(CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON){

需要("src/physical.js");

}

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

}

别的{

需要("src/settings.js");

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

如果(CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON){

需要("src/physical.js");

}

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

}

/*

* 纹理上传到GPU后是否删除原始图像缓存。删除后,图片将无法【动态】组合(https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。

* 在Web平台上,通常不需要启用该选项,因为Image对象在Web平台上占用的内存很少。

* 但在当前版本的微信小游戏平台中,Image对象缓存了解码后的图像数据,占用了大量的内存空间。

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

*/

cc.macro.CLEANUP_IMAGE_CACHE=true;

窗口.boot();

用户评论

不要冷战i

终于有时间深入看看CocosCreator是怎么运作的了!

    有9位网友表示赞同!

未来未必来

对游戏引擎源码一直很好奇,学习一下应该很有收获。

    有11位网友表示赞同!

青衫故人

希望能从源码中了解到CocosCreator的厉害之处!

    有15位网友表示赞同!

烟雨离殇

看懂源码才能更好地使用CocosCreator吧,期待深入学习。

    有20位网友表示赞同!

呆萌

有没有一些详细的分析和讲解?我日语有点基础,不太懂很多代码解释。

    有5位网友表示赞同!

断秋风

最近在做游戏开发,希望能从源码中找到灵感。

    有6位网友表示赞同!

Edinburgh°南空

学习CocosCreator的源码感觉难度不小,需要多花时间去理解。

    有9位网友表示赞同!

素衣青丝

希望能分享一些比较核心代码的部分,方便我们关注关键逻辑。

    有11位网友表示赞同!

怀念·最初

如果能加上一些针对不同场景的源码分析,那就更棒了!

    有7位网友表示赞同!

君临臣

了解 CocosCreator 的底层实现机制可以帮助我更好地优化游戏性能。

    有12位网友表示赞同!

掉眼泪

想看看CocosCreator是如何处理场景渲染和物理引擎的?

    有6位网友表示赞同!

此生一诺

很期待看到关于网络通信模块源码分析的部分!

    有8位网友表示赞同!

安之若素

如果能提供一些源码修改的小技巧,那可真是太感谢了!

    有18位网友表示赞同!

呆檬

学习源码分析可以帮助我更好的理解游戏开发原理。

    有16位网友表示赞同!

眷恋

源代码解析的文章非常有价值,谢谢作者分享!

    有15位网友表示赞同!

留我一人

这篇文章正好符合我的需求,我现在正在研究CocosCreator的网络功能。

    有12位网友表示赞同!

志平

CocosCreator 是一个非常强大的引擎,源码分析肯定会有很多收获!

    有5位网友表示赞同!

风中摇曳着长发

学习游戏引擎的源码是提升技能的重要环节!

    有8位网友表示赞同!

軨倾词

期待作者能持续更新更多精彩的源码分析内容!

    有15位网友表示赞同!

【深入解析CocosCreator核心源码:揭秘游戏开发奥秘】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:《探寻希腊之美:三部曲第一篇的感悟与体验》 下一篇:揭秘:三款神奇食材,醋泡之后防病强身,快和家人朋友分享吧!