123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- /****************************************************************************
- Copyright (c) 2010-2012 cocos2d-x.org
- Copyright (c) 2008-2010 Ricardo Quesada
- Copyright (c) 2011 Zynga Inc.
- http://www.cocos2d-x.org
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- ****************************************************************************/
- /**
- * resource type
- * @constant
- * @type Object
- */
- cc.RESOURCE_TYPE = {
- "IMAGE": ["png", "jpg", "bmp", "jpeg", "gif"],
- "SOUND": ["mp3", "ogg", "wav", "mp4", "m4a"],
- "XML": ["plist", "xml", "fnt", "tmx", "tsx"],
- "BINARY": ["ccbi"],
- "FONT": "FONT",
- "TEXT": ["txt", "vsh", "fsh", "json", "ExportJson"],
- "UNKNOW": []
- };
- /**
- * resource structure
- * @param resList
- * @param selector
- * @param target
- * @constructor
- */
- cc.ResData = function (resList, selector, target) {
- this.resList = resList || [];
- this.selector = selector;
- this.target = target;
- this.curNumber = 0;
- this.loadedNumber = 0;
- this.totalNumber = this.resList.length;
- };
- /**
- * A class to preload resources async
- * @class
- * @extends cc.Class
- */
- cc.Loader = cc.Class.extend(/** @lends cc.Loader# */{
- _curData: null,
- _resQueue: null,
- _isAsync: false,
- _scheduler: null,
- _running: false,
- _regisiterLoader: false,
- /**
- * Constructor
- */
- ctor: function () {
- this._scheduler = cc.Director.getInstance().getScheduler();
- this._resQueue = [];
- },
- /**
- * init with resources
- * @param {Array} resources
- * @param {Function|String} selector
- * @param {Object} target
- */
- initWithResources: function (resources, selector, target) {
- if (!resources) {
- cc.log("cocos2d:resources should not null");
- return;
- }
- var res = resources.concat([]);
- var data = new cc.ResData(res, selector, target);
- this._resQueue.push(data);
- if (!this._running) {
- this._running = true;
- this._curData = this._resQueue.shift();
- this._scheduler.scheduleUpdateForTarget(this);
- }
- },
- setAsync: function (isAsync) {
- this._isAsync = isAsync;
- },
- /**
- * Callback when a resource file loaded.
- */
- onResLoaded: function (err) {
- if(err != null){
- cc.log("cocos2d:Failed loading resource: " + err);
- }
- this._curData.loadedNumber++;
- },
- /**
- * Get loading percentage
- * @return {Number}
- * @example
- * //example
- * cc.log(cc.Loader.getInstance().getPercentage() + "%");
- */
- getPercentage: function () {
- var percent = 0, curData = this._curData;
- if (curData.totalNumber == 0) {
- percent = 100;
- }
- else {
- percent = (0 | (curData.loadedNumber / curData.totalNumber * 100));
- }
- return percent;
- },
- /**
- * release resources from a list
- * @param resources
- */
- releaseResources: function (resources) {
- if (resources && resources.length > 0) {
- var sharedTextureCache = cc.TextureCache.getInstance(),
- sharedEngine = cc.AudioEngine ? cc.AudioEngine.getInstance() : null,
- sharedParser = cc.SAXParser.getInstance(),
- sharedFileUtils = cc.FileUtils.getInstance();
- var resInfo, path, type;
- for (var i = 0; i < resources.length; i++) {
- resInfo = resources[i];
- path = typeof resInfo == "string" ? resInfo : resInfo.src;
- type = this._getResType(resInfo, path);
- switch (type) {
- case "IMAGE":
- sharedTextureCache.removeTextureForKey(path);
- break;
- case "SOUND":
- if (!sharedEngine) throw "Can not find AudioEngine! Install it, please.";
- sharedEngine.unloadEffect(path);
- break;
- case "XML":
- sharedParser.unloadPlist(path);
- break;
- case "BINARY":
- sharedFileUtils.unloadBinaryFileData(path);
- break;
- case "TEXT":
- sharedFileUtils.unloadTextFileData(path);
- break;
- case "FONT":
- this._unregisterFaceFont(resInfo);
- break;
- default:
- throw "cocos2d:unknown filename extension: " + type;
- break;
- }
- }
- }
- },
- update: function () {
- if (this._isAsync) {
- var frameRate = cc.Director.getInstance()._frameRate;
- if (frameRate != null && frameRate < 20) {
- cc.log("cocos2d: frame rate less than 20 fps, skip frame.");
- return;
- }
- }
- var curData = this._curData;
- if (curData && curData.curNumber < curData.totalNumber) {
- this._loadRes();
- curData.curNumber++;
- }
- var percent = this.getPercentage();
- if(percent >= 100){
- this._complete();
- if (this._resQueue.length > 0) {
- this._running = true;
- this._curData = this._resQueue.shift();
- }
- else{
- this._running = false;
- this._scheduler.unscheduleUpdateForTarget(this);
- }
- }
- },
- _loadRes: function () {
- var sharedTextureCache = cc.TextureCache.getInstance(),
- sharedEngine = cc.AudioEngine ? cc.AudioEngine.getInstance() : null,
- sharedParser = cc.SAXParser.getInstance(),
- sharedFileUtils = cc.FileUtils.getInstance();
- var resInfo = this._curData.resList.shift(),
- path = this._getResPath(resInfo),
- type = this._getResType(resInfo, path);
- switch (type) {
- case "IMAGE":
- sharedTextureCache.addImageAsync(path, this.onResLoaded, this);
- break;
- case "SOUND":
- if (!sharedEngine) throw "Can not find AudioEngine! Install it, please.";
- sharedEngine.preloadSound(path, this.onResLoaded, this);
- break;
- case "XML":
- sharedParser.preloadPlist(path, this.onResLoaded, this);
- break;
- case "BINARY":
- sharedFileUtils.preloadBinaryFileData(path, this.onResLoaded, this);
- break;
- case "TEXT" :
- sharedFileUtils.preloadTextFileData(path, this.onResLoaded, this);
- break;
- case "FONT":
- this._registerFaceFont(resInfo, this.onResLoaded, this);
- break;
- default:
- throw "cocos2d:unknown filename extension: " + type;
- break;
- }
- },
- _getResPath: function (resInfo) {
- return typeof resInfo == "string" ? resInfo : resInfo.src;
- },
- _getResType: function (resInfo, path) {
- var isFont = resInfo.fontName;
- if (isFont != null) {
- return cc.RESOURCE_TYPE["FONT"];
- }
- else {
- var ext = path.substring(path.lastIndexOf(".") + 1, path.length);
- var index = ext.indexOf("?");
- if (index > 0) ext = ext.substring(0, index);
- for (var resType in cc.RESOURCE_TYPE) {
- if (cc.RESOURCE_TYPE[resType].indexOf(ext) != -1) {
- return resType;
- }
- }
- return ext;
- }
- },
- _complete: function () {
- cc.doCallback(this._curData.selector,this._curData.target);
- },
- _registerFaceFont: function (fontRes,seletor,target) {
- var srcArr = fontRes.src;
- var fileUtils = cc.FileUtils.getInstance();
- if (srcArr && srcArr.length > 0) {
- var fontStyle = document.createElement("style");
- fontStyle.type = "text/css";
- document.body.appendChild(fontStyle);
- var fontStr = "@font-face { font-family:" + fontRes.fontName + "; src:";
- for (var i = 0; i < srcArr.length; i++) {
- fontStr += "url('" + fileUtils.fullPathForFilename(encodeURI(srcArr[i].src)) + "') format('" + srcArr[i].type + "')";
- fontStr += (i == (srcArr.length - 1)) ? ";" : ",";
- }
- fontStyle.textContent += fontStr + "};";
- //preload
- //<div style="font-family: PressStart;">.</div>
- var preloadDiv = document.createElement("div");
- preloadDiv.style.fontFamily = fontRes.fontName;
- preloadDiv.innerHTML = ".";
- preloadDiv.style.position = "absolute";
- preloadDiv.style.left = "-100px";
- preloadDiv.style.top = "-100px";
- document.body.appendChild(preloadDiv);
- }
- cc.doCallback(seletor,target);
- },
- _unregisterFaceFont: function (fontRes) {
- //todo remove style
- }
- });
- /**
- * Preload resources in the background
- * @param {Array} resources
- * @param {Function|String} selector
- * @param {Object} target
- * @return {cc.Loader}
- * @example
- * //example
- * var g_mainmenu = [
- * {src:"res/hello.png"},
- * {src:"res/hello.plist"},
- *
- * {src:"res/logo.png"},
- * {src:"res/btn.png"},
- *
- * {src:"res/boom.mp3"},
- * ]
- *
- * var g_level = [
- * {src:"res/level01.png"},
- * {src:"res/level02.png"},
- * {src:"res/level03.png"}
- * ]
- *
- * //load a list of resources
- * cc.Loader.preload(g_mainmenu, this.startGame, this);
- *
- * //load multi lists of resources
- * cc.Loader.preload([g_mainmenu,g_level], this.startGame, this);
- */
- cc.Loader.preload = function (resources, selector, target) {
- if (!this._instance) {
- this._instance = new cc.Loader();
- }
- this._instance.initWithResources(resources, selector, target);
- return this._instance;
- };
- /**
- * Preload resources async
- * @param {Array} resources
- * @param {Function|String} selector
- * @param {Object} target
- * @return {cc.Loader}
- */
- cc.Loader.preloadAsync = function (resources, selector, target) {
- if (!this._instance) {
- this._instance = new cc.Loader();
- }
- this._instance.setAsync(true);
- this._instance.initWithResources(resources, selector, target);
- return this._instance;
- };
- /**
- * Release the resources from a list
- * @param {Array} resources
- */
- cc.Loader.purgeCachedData = function (resources) {
- if (this._instance) {
- this._instance.releaseResources(resources);
- }
- };
- /**
- * Returns a shared instance of the loader
- * @function
- * @return {cc.Loader}
- */
- cc.Loader.getInstance = function () {
- if (!this._instance) {
- this._instance = new cc.Loader();
- }
- return this._instance;
- };
- cc.Loader._instance = null;
- /**
- * Used to display the loading screen
- * @class
- * @extends cc.Scene
- */
- cc.LoaderScene = cc.Scene.extend(/** @lends cc.LoaderScene# */{
- _logo: null,
- _logoTexture: null,
- _texture2d: null,
- _bgLayer: null,
- _label: null,
- _winSize: null,
- /**
- * Constructor
- */
- ctor: function () {
- cc.Scene.prototype.ctor.call(this);
- this._winSize = cc.Director.getInstance().getWinSize();
- },
- init: function () {
- cc.Scene.prototype.init.call(this);
- //logo
- var logoWidth = 160;
- var logoHeight = 200;
- var centerPos = cc.p(this._winSize.width / 2, this._winSize.height / 2);
- this._logoTexture = new Image();
- var _this = this, handler;
- this._logoTexture.addEventListener("load", handler = function () {
- _this._initStage(centerPos);
- this.removeEventListener('load', handler, false);
- });
- this._logoTexture.src = "data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAlAAD/4QMpaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM4MDBEMDY2QTU1MjExRTFBQTAzQjEzMUNFNzMxRkQwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM4MDBEMDY1QTU1MjExRTFBQTAzQjEzMUNFNzMxRkQwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU2RTk0OEM4OERCNDExRTE5NEUyRkE3M0M3QkE1NTlEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU2RTk0OEM5OERCNDExRTE5NEUyRkE3M0M3QkE1NTlEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+/+4ADkFkb2JlAGTAAAAAAf/bAIQADQkJCQoJDQoKDRMMCwwTFhENDREW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";
- this._logoTexture.width = logoWidth;
- this._logoTexture.height = logoHeight;
- // bg
- this._bgLayer = cc.LayerColor.create(cc.c4(32, 32, 32, 255));
- this._bgLayer.setPosition(0, 0);
- this.addChild(this._bgLayer, 0);
- //loading percent
- this._label = cc.LabelTTF.create("Loading... 0%", "Arial", 14);
- this._label.setColor(cc.c3(180, 180, 180));
- this._label.setPosition(cc.pAdd(centerPos, cc.p(0, -logoHeight / 2 - 10)));
- this._bgLayer.addChild(this._label, 10);
- },
- _initStage: function (centerPos) {
- this._texture2d = new cc.Texture2D();
- this._texture2d.initWithElement(this._logoTexture);
- this._texture2d.handleLoadedTexture();
- this._logo = cc.Sprite.createWithTexture(this._texture2d);
- this._logo.setScale(cc.CONTENT_SCALE_FACTOR());
- this._logo.setPosition(centerPos);
- //this._bgLayer.addChild(this._logo, 10);
- },
- onEnter: function () {
- cc.Node.prototype.onEnter.call(this);
- this.schedule(this._startLoading, 0.3);
- },
- onExit: function () {
- cc.Node.prototype.onExit.call(this);
- var tmpStr = "Loading... 0%";
- this._label.setString(tmpStr);
- },
- /**
- * init with resources
- * @param {Array} resources
- * @param {Function|String} selector
- * @param {Object} target
- */
- initWithResources: function (resources, selector, target) {
- this.resources = resources;
- this.selector = selector;
- this.target = target;
- },
- _startLoading: function () {
- this.unschedule(this._startLoading);
- cc.Loader.preload(this.resources, this.selector, this.target);
- this.schedule(this._updatePercent);
- },
- _updatePercent: function () {
- var percent = cc.Loader.getInstance().getPercentage();
- var tmpStr = "Loading... " + percent + "%";
- this._label.setString(tmpStr);
- if (percent >= 100)
- this.unschedule(this._updatePercent);
- }
- });
- /**
- * Preload multi scene resources.
- * @param {Array} resources
- * @param {Function|String} selector
- * @param {Object} target
- * @return {cc.LoaderScene}
- * @example
- * //example
- * var g_mainmenu = [
- * {src:"res/hello.png"},
- * {src:"res/hello.plist"},
- *
- * {src:"res/logo.png"},
- * {src:"res/btn.png"},
- *
- * {src:"res/boom.mp3"},
- * ]
- *
- * var g_level = [
- * {src:"res/level01.png"},
- * {src:"res/level02.png"},
- * {src:"res/level03.png"}
- * ]
- *
- * //load a list of resources
- * cc.LoaderScene.preload(g_mainmenu, this.startGame, this);
- *
- * //load multi lists of resources
- * cc.LoaderScene.preload([g_mainmenu,g_level], this.startGame, this);
- */
- cc.LoaderScene.preload = function (resources, selector, target) {
- if (!this._instance) {
- this._instance = new cc.LoaderScene();
- this._instance.init();
- }
- this._instance.initWithResources(resources, selector, target);
- var director = cc.Director.getInstance();
- if (director.getRunningScene()) {
- director.replaceScene(this._instance);
- } else {
- director.runWithScene(this._instance);
- }
- return this._instance;
- };
|