Skip to content

Commit

Permalink
Merge branch 'develop' into program-state
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidDeSimone authored May 22, 2017
2 parents 781c3c8 + 2083141 commit ea7994d
Show file tree
Hide file tree
Showing 75 changed files with 6,782 additions and 3,698 deletions.
122 changes: 86 additions & 36 deletions CCBoot.js
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,33 @@ cc.path = /** @lends cc.path# */{
* @see cc.loader
*/

var imagePool = {
_pool: new Array(10),
_MAX: 10,
_smallImg: "data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=",

count: 0,
get: function () {
if (this.count > 0) {
this.count--;
var result = this._pool[this.count];
this._pool[this.count] = null;
return result;
}
else {
return new Image();
}
},
put: function (img) {
var pool = this._pool;
if (img instanceof HTMLImageElement && this.count < this._MAX) {
img.src = this._smallImg;
pool[this.count] = img;
this.count++;
}
}
};

/**
* Singleton instance of cc.Loader.
* @name cc.loader
Expand Down Expand Up @@ -867,7 +894,7 @@ cc.loader = (function () {
* @param {function} callback
* @returns {Image}
*/
loadImg: function (url, option, callback) {
loadImg: function (url, option, callback, img) {
var opt = {
isCrossOrigin: true
};
Expand All @@ -876,10 +903,10 @@ cc.loader = (function () {
else if (option !== undefined)
callback = option;

var img = this.getRes(url);
if (img) {
callback && callback(null, img);
return img;
var texture = this.getRes(url);
if (texture) {
callback && callback(null, texture);
return null;
}

var queue = _queue[url];
Expand All @@ -888,18 +915,16 @@ cc.loader = (function () {
return queue.img;
}

img = new Image();
img = img || imagePool.get();
if (opt.isCrossOrigin && location.origin !== "file://")
img.crossOrigin = "Anonymous";
else
img.crossOrigin = null;

var loadCallback = function () {
this.removeEventListener('load', loadCallback, false);
this.removeEventListener('error', errorCallback, false);

if (!_urlRegExp.test(url)) {
cc.loader.cache[url] = img;
}

var queue = _queue[url];
if (queue) {
var callbacks = queue.callbacks;
Expand All @@ -912,16 +937,21 @@ cc.loader = (function () {
queue.img = null;
delete _queue[url];
}

if (cc._renderType === cc.game.RENDER_TYPE_WEBGL) {
imagePool.put(img);
}
};

var self = this;
var errorCallback = function () {
this.removeEventListener('load', loadCallback, false);
this.removeEventListener('error', errorCallback, false);

if (img.crossOrigin && img.crossOrigin.toLowerCase() === "anonymous") {
if (window.location.protocol !== 'https:' && img.crossOrigin && img.crossOrigin.toLowerCase() === "anonymous") {
opt.isCrossOrigin = false;
self.release(url);
cc.loader.loadImg(url, opt, callback);
cc.loader.loadImg(url, opt, callback, img);
} else {
var queue = _queue[url];
if (queue) {
Expand All @@ -935,6 +965,10 @@ cc.loader = (function () {
queue.img = null;
delete _queue[url];
}

if (cc._renderType === cc.game.RENDER_TYPE_WEBGL) {
imagePool.put(img);
}
}
};

Expand Down Expand Up @@ -1610,6 +1644,7 @@ var _initSys = function () {
sys.BROWSER_TYPE_WECHAT = "wechat";
sys.BROWSER_TYPE_ANDROID = "androidbrowser";
sys.BROWSER_TYPE_IE = "ie";
sys.BROWSER_TYPE_QQ_APP = "qq"; // QQ App
sys.BROWSER_TYPE_QQ = "qqbrowser";
sys.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser";
sys.BROWSER_TYPE_UC = "ucbrowser";
Expand Down Expand Up @@ -1727,13 +1762,13 @@ var _initSys = function () {
/* Determine the browser type */
(function(){
var typeReg1 = /micromessenger|mqqbrowser|sogou|qzone|liebao|ucbrowser|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|trident|miuibrowser/i;
var typeReg2 = /qqbrowser|chrome|safari|firefox|opr|oupeng|opera/i;
var typeReg2 = /qqbrowser|qq|chrome|safari|firefox|opr|oupeng|opera/i;
var browserTypes = typeReg1.exec(ua);
if(!browserTypes) browserTypes = typeReg2.exec(ua);
var browserType = browserTypes ? browserTypes[0] : sys.BROWSER_TYPE_UNKNOWN;
if (browserType === 'micromessenger')
browserType = sys.BROWSER_TYPE_WECHAT;
else if (browserType === "safari" && (ua.match(/android.*applewebkit/)))
else if (browserType === "safari" && isAndroid)
browserType = sys.BROWSER_TYPE_ANDROID;
else if (browserType === "trident")
browserType = sys.BROWSER_TYPE_IE;
Expand All @@ -1756,8 +1791,8 @@ var _initSys = function () {
sys.browserVersion = "";
/* Determine the browser version number */
(function(){
var versionReg1 = /(micromessenger|qq|mx|maxthon|baidu|sogou)(mobile)?(browser)?\/?([\d.]+)/i;
var versionReg2 = /(msie |rv:|firefox|chrome|ucbrowser|oupeng|opera|opr|safari|miui)(mobile)?(browser)?\/?([\d.]+)/i;
var versionReg1 = /(mqqbrowser|micromessenger|sogou|qzone|liebao|maxthon|mxbrowser|baidu)(mobile)?(browser)?\/?([\d.]+)/i;
var versionReg2 = /(msie |rv:|firefox|chrome|ucbrowser|qq|oupeng|opera|opr|safari|miui)(mobile)?(browser)?\/?([\d.]+)/i;
var tmp = ua.match(versionReg1);
if(!tmp) tmp = ua.match(versionReg2);
sys.browserVersion = tmp ? tmp[4] : "";
Expand Down Expand Up @@ -1843,7 +1878,7 @@ var _initSys = function () {
var tmpCanvas = document.createElement("CANVAS");
try{
var context = cc.create3DContext(tmpCanvas);
if (context && context.getShaderPrecisionFormat) {
if (context) {
_supportWebGL = true;
}

Expand Down Expand Up @@ -2329,6 +2364,7 @@ cc.game = /** @lends cc.game# */{
config[CONFIG_KEY.frameRate] = frameRate;
if (self._intervalId)
window.cancelAnimationFrame(self._intervalId);
self._intervalId = 0;
self._paused = true;
self._setAnimFrame();
self._runMainLoop();
Expand All @@ -2349,8 +2385,7 @@ cc.game = /** @lends cc.game# */{
this._paused = true;
// Pause audio engine
if (cc.audioEngine) {
cc.audioEngine.stopAllEffects();
cc.audioEngine.pauseMusic();
cc.audioEngine._pausePlaying();
}
// Pause main loop
if (this._intervalId)
Expand All @@ -2366,7 +2401,7 @@ cc.game = /** @lends cc.game# */{
this._paused = false;
// Resume audio engine
if (cc.audioEngine) {
cc.audioEngine.resumeMusic();
cc.audioEngine._resumePlaying();
}
// Resume main loop
this._runMainLoop();
Expand Down Expand Up @@ -2512,8 +2547,9 @@ cc.game = /** @lends cc.game# */{
// @Time ticker section
_setAnimFrame: function () {
this._lastTime = new Date();
this._frameTime = 1000 / cc.game.config[cc.game.CONFIG_KEY.frameRate];
if ((cc.sys.os === cc.sys.OS_IOS && cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT) || cc.game.config[cc.game.CONFIG_KEY.frameRate] !== 60) {
var frameRate = cc.game.config[cc.game.CONFIG_KEY.frameRate];
this._frameTime = 1000 / frameRate;
if (frameRate !== 60 && frameRate !== 30) {
window.requestAnimFrame = this._stTime;
window.cancelAnimationFrame = this._ctTime;
}
Expand Down Expand Up @@ -2551,20 +2587,26 @@ cc.game = /** @lends cc.game# */{
//Run game.
_runMainLoop: function () {
var self = this, callback, config = self.config, CONFIG_KEY = self.CONFIG_KEY,
director = cc.director;
director = cc.director,
skip = true, frameRate = config[CONFIG_KEY.frameRate];

director.setDisplayStats(config[CONFIG_KEY.showFPS]);

callback = function () {
if (!self._paused) {
if (frameRate === 30) {
if (skip = !skip) {
self._intervalId = window.requestAnimFrame(callback);
return;
}
}

director.mainLoop();
if (self._intervalId)
window.cancelAnimationFrame(self._intervalId);
self._intervalId = window.requestAnimFrame(callback);
}
};

window.requestAnimFrame(callback);
self._intervalId = window.requestAnimFrame(callback);
self._paused = false;
},

Expand Down Expand Up @@ -2660,7 +2702,7 @@ cc.game = /** @lends cc.game# */{
}
width = width || element.clientWidth;
height = height || element.clientHeight;
this.canvas = cc._canvas = localCanvas = document.createElement("CANVAS");
this.canvas = cc._canvas = localCanvas = cc.$(document.createElement("CANVAS"));
this.container = cc.container = localContainer = document.createElement("DIV");
element.appendChild(localContainer);
}
Expand Down Expand Up @@ -2708,7 +2750,7 @@ cc.game = /** @lends cc.game# */{
},

_initEvents: function () {
var win = window, self = this, hidden, visibilityChange, _undef = "undefined";
var win = window, hidden;

this._eventHide = this._eventHide || new cc.EventCustom(this.EVENT_HIDE);
this._eventHide.setUserData(this);
Expand All @@ -2721,18 +2763,21 @@ cc.game = /** @lends cc.game# */{

if (!cc.isUndefined(document.hidden)) {
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (!cc.isUndefined(document.mozHidden)) {
hidden = "mozHidden";
visibilityChange = "mozvisibilitychange";
} else if (!cc.isUndefined(document.msHidden)) {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (!cc.isUndefined(document.webkitHidden)) {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}

var changeList = [
"visibilitychange",
"mozvisibilitychange",
"msvisibilitychange",
"webkitvisibilitychange",
"qbrowserVisibilityChange"
];
var onHidden = function () {
if (cc.eventManager && cc.game._eventHide)
cc.eventManager.dispatchEvent(cc.game._eventHide);
Expand All @@ -2743,10 +2788,15 @@ cc.game = /** @lends cc.game# */{
};

if (hidden) {
document.addEventListener(visibilityChange, function () {
if (document[hidden]) onHidden();
else onShow();
}, false);
for (var i=0; i<changeList.length; i++) {
document.addEventListener(changeList[i], function (event) {
var visible = document[hidden];
// QQ App
visible = visible || event["hidden"];
if (visible) onHidden();
else onShow();
}, false);
}
} else {
win.addEventListener("blur", onHidden, false);
win.addEventListener("focus", onShow, false);
Expand Down
4 changes: 2 additions & 2 deletions README.mdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Cocos2d-html5
==================

[Cocos2d-html5][1] is a cross-platform 2D game engine written in Javascript, based on [Cocos2d-X][2] and licensed under MIT.
[Cocos2d-html5][1] is a cross-platform 2D game engine written in JavaScript, based on [Cocos2d-X][2] and licensed under MIT.
It incorporates the same high level api as “Cocos2d JS-binding engine” and compatible with Cocos2d-X.
It currently supports canvas and WebGL renderer.

Expand Down Expand Up @@ -49,4 +49,4 @@ Contact us
[5]: http://forum.cocos2d-x.org "http://forum.cocos2d-x.org"
[6]: http://www.twitter.com/cocos2dhtml5 "http://www.twitter.com/cocos2dhtml5"
[7]: http://t.sina.com.cn/cocos2dhtml5 "http://t.sina.com.cn/cocos2dhtml5"
[8]: http://bower.io "http://bower.io"
[8]: http://bower.io "http://bower.io"
2 changes: 1 addition & 1 deletion cocos2d/actions/CCActionInterval.js
Original file line number Diff line number Diff line change
Expand Up @@ -3363,7 +3363,7 @@ cc.Animate = cc.ActionInterval.extend(/** @lends cc.Animate# */{
startWithTarget: function (target) {
cc.ActionInterval.prototype.startWithTarget.call(this, target);
if (this._animation.getRestoreOriginalFrame())
this._origFrame = target.displayFrame();
this._origFrame = target.getSpriteFrame();
this._nextFrame = 0;
this._executedLoops = 0;
},
Expand Down
Loading

0 comments on commit ea7994d

Please sign in to comment.