定義的全局方法 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 顯示的設備上默認進行優(yōu)化,而其他類型設備默認不進行優(yōu)化,
cc.view.enableRetina(true);
//設置當發(fā)現瀏覽器的尺寸改變時,是否自動調整 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) {
//下載時的最大并發(fā)數
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取決于你的游戲實現和運行環(huán)境。? ? ?<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 之后刪除原始圖片緩存,刪除之后圖片將無法進行 [動態(tài)合圖](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();
}
歡迎交流