Skip to content

Commit 91941a7

Browse files
authored
Merge pull request #3468 from pandamicro/develop
Bug fixes and sync some improvements from Creator engine
2 parents fa8edd4 + 1fec2d2 commit 91941a7

File tree

14 files changed

+111
-55
lines changed

14 files changed

+111
-55
lines changed

CCBoot.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,7 @@ cc.loader = (function () {
916916

917917
var self = this;
918918
var errorCallback = function () {
919+
this.removeEventListener('load', loadCallback, false);
919920
this.removeEventListener('error', errorCallback, false);
920921

921922
if (img.crossOrigin && img.crossOrigin.toLowerCase() === "anonymous") {
@@ -1757,7 +1758,7 @@ var _initSys = function () {
17571758
sys.browserVersion = "";
17581759
/* Determine the browser version number */
17591760
(function(){
1760-
var versionReg1 = /(micromessenger|qq|mx|maxthon|baidu|sogou)(mobile)?(browser)?\/?([\d.]+)/i;
1761+
var versionReg1 = /(micromessenger|mqqbrowser|qq|maxthon|baidu|sogou)(mobile)?(browser)?\/?([\d.]+)/i;
17611762
var versionReg2 = /(msie |rv:|firefox|chrome|ucbrowser|oupeng|opera|opr|safari|miui)(mobile)?(browser)?\/?([\d.]+)/i;
17621763
var tmp = ua.match(versionReg1);
17631764
if(!tmp) tmp = ua.match(versionReg2);
@@ -1844,7 +1845,7 @@ var _initSys = function () {
18441845
var tmpCanvas = document.createElement("CANVAS");
18451846
try{
18461847
var context = cc.create3DContext(tmpCanvas);
1847-
if (context && context.getShaderPrecisionFormat) {
1848+
if (context) {
18481849
_supportWebGL = true;
18491850
}
18501851

@@ -2330,6 +2331,7 @@ cc.game = /** @lends cc.game# */{
23302331
config[CONFIG_KEY.frameRate] = frameRate;
23312332
if (self._intervalId)
23322333
window.cancelAnimationFrame(self._intervalId);
2334+
self._intervalId = 0;
23332335
self._paused = true;
23342336
self._setAnimFrame();
23352337
self._runMainLoop();
@@ -2512,8 +2514,9 @@ cc.game = /** @lends cc.game# */{
25122514
// @Time ticker section
25132515
_setAnimFrame: function () {
25142516
this._lastTime = new Date();
2515-
this._frameTime = 1000 / cc.game.config[cc.game.CONFIG_KEY.frameRate];
2516-
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) {
2517+
var frameRate = cc.game.config[cc.game.CONFIG_KEY.frameRate];
2518+
this._frameTime = 1000 / frameRate;
2519+
if (frameRate !== 60 && frameRate !== 30) {
25172520
window.requestAnimFrame = this._stTime;
25182521
window.cancelAnimationFrame = this._ctTime;
25192522
}
@@ -2551,20 +2554,26 @@ cc.game = /** @lends cc.game# */{
25512554
//Run game.
25522555
_runMainLoop: function () {
25532556
var self = this, callback, config = self.config, CONFIG_KEY = self.CONFIG_KEY,
2554-
director = cc.director;
2557+
director = cc.director,
2558+
skip = true, frameRate = config[CONFIG_KEY.frameRate];
25552559

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

25582562
callback = function () {
25592563
if (!self._paused) {
2564+
if (frameRate === 30) {
2565+
if (skip = !skip) {
2566+
self._intervalId = window.requestAnimFrame(callback);
2567+
return;
2568+
}
2569+
}
2570+
25602571
director.mainLoop();
2561-
if (self._intervalId)
2562-
window.cancelAnimationFrame(self._intervalId);
25632572
self._intervalId = window.requestAnimFrame(callback);
25642573
}
25652574
};
25662575

2567-
window.requestAnimFrame(callback);
2576+
self._intervalId = window.requestAnimFrame(callback);
25682577
self._paused = false;
25692578
},
25702579

cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@
2222
THE SOFTWARE.
2323
****************************************************************************/
2424

25+
function setProgram (node, program) {
26+
node.shaderProgram = program;
27+
28+
var children = node.children;
29+
if (!children)
30+
return;
31+
32+
for (var i = 0; i < children.length; i++)
33+
setProgram(children[i], program);
34+
}
35+
2536
// ------------------------------- ClippingNode's WebGL render cmd ------------------------------
2637
(function () {
2738
cc.ClippingNode.WebGLRenderCmd = function (renderable) {
@@ -128,7 +139,7 @@
128139
var node = this._node;
129140
if (node._stencil) {
130141
var program = node._originStencilProgram;
131-
cc.setProgram(node._stencil, program);
142+
setProgram(node._stencil, program);
132143
}
133144
};
134145

cocos2d/core/CCDirector.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ cc.Director = cc.Class.extend(/** @lends cc.Director# */{
183183
convertToGL: function (uiPoint) {
184184
var docElem = document.documentElement;
185185
var view = cc.view;
186-
var box = element.getBoundingClientRect();
186+
var box = docElem.getBoundingClientRect();
187187
box.left += window.pageXOffset - docElem.clientLeft;
188188
box.top += window.pageYOffset - docElem.clientTop;
189189
var x = view._devicePixelRatio * (uiPoint.x - box.left);
@@ -202,7 +202,7 @@ cc.Director = cc.Class.extend(/** @lends cc.Director# */{
202202
convertToUI: function (glPoint) {
203203
var docElem = document.documentElement;
204204
var view = cc.view;
205-
var box = element.getBoundingClientRect();
205+
var box = docElem.getBoundingClientRect();
206206
box.left += window.pageXOffset - docElem.clientLeft;
207207
box.top += window.pageYOffset - docElem.clientTop;
208208
var uiPoint = {x: 0, y: 0};

cocos2d/core/base-nodes/CCNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2015,7 +2015,7 @@ cc.Node = cc.Class.extend(/** @lends cc.Node# */{
20152015
updateTransform: function () {
20162016
var children = this._children, node;
20172017
for (var i = 0; i < children.length; i++) {
2018-
varnode = children[i];
2018+
var node = children[i];
20192019
if (node)
20202020
node.updateTransform();
20212021
}

cocos2d/core/layers/CCLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ cc.LayerColor = cc.Layer.extend(/** @lends cc.LayerColor# */{
247247
return true;
248248
},
249249

250-
visit: function () {
250+
visit: function (parent) {
251251
// quick return if not visible
252252
if (!this._visible)
253253
return;

cocos2d/core/platform/CCEGLView.js

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
140140
_resizeCallback: null,
141141

142142
_orientationChanging: true,
143+
_resizing: false,
143144

144145
_scaleX: 1,
145146
_originalScaleX: 1,
@@ -187,8 +188,6 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
187188
_t._viewName = "Cocos2dHTML5";
188189

189190
var sys = cc.sys;
190-
_t.enableRetina(sys.os === sys.OS_IOS || sys.os === sys.OS_OSX);
191-
_t.enableAutoFullScreen(sys.isMobile && sys.browserType !== sys.BROWSER_TYPE_BAIDU);
192191
cc.visibleRect && cc.visibleRect.init(_t._visibleRect);
193192

194193
// Setup system default resolution policies
@@ -212,15 +211,29 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
212211

213212
// Check frame size changed or not
214213
var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated;
215-
view._initFrameSize();
214+
if (cc.sys.isMobile) {
215+
var containerStyle = cc.game.container.style,
216+
margin = containerStyle.margin;
217+
containerStyle.margin = '0';
218+
containerStyle.display = 'none';
219+
view._initFrameSize();
220+
containerStyle.margin = margin;
221+
containerStyle.display = 'block';
222+
}
223+
else {
224+
view._initFrameSize();
225+
}
216226
if (view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH)
217227
return;
218228

219229
// Frame size changed, do resize works
220230
var width = view._originalDesignResolutionSize.width;
221231
var height = view._originalDesignResolutionSize.height;
222-
if (width > 0)
232+
view._resizing = true;
233+
if (width > 0) {
223234
view.setDesignResolutionSize(width, height, view._resolutionPolicy);
235+
}
236+
view._resizing = false;
224237

225238
cc.eventManager.dispatchCustomEvent('canvas-resize');
226239
if (view._resizeCallback) {
@@ -347,9 +360,11 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
347360
cc.container.style.transformOrigin = '0px 0px 0px';
348361
this._isRotated = true;
349362
}
350-
setTimeout(function () {
351-
cc.view._orientationChanging = false;
352-
}, 1000);
363+
if (this._orientationChanging) {
364+
setTimeout(function () {
365+
cc.view._orientationChanging = false;
366+
}, 1000);
367+
}
353368
},
354369

355370
// hack
@@ -482,12 +497,6 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
482497
return this._autoFullScreen;
483498
},
484499

485-
/**
486-
* Force destroying EGL view, subclass must implement this method.
487-
*/
488-
end: function () {
489-
},
490-
491500
/**
492501
* Get whether render system is ready(no matter opengl or canvas),<br/>
493502
* this name is for the compatibility with cocos2d-x, subclass must implement this method.
@@ -688,7 +697,8 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
688697

689698
// Permit to re-detect the orientation of device.
690699
this._orientationChanging = true;
691-
this._initFrameSize();
700+
if (!this._resizing)
701+
this._initFrameSize();
692702

693703
if (!policy) {
694704
cc.log(cc._LogInfos.EGLView_setDesignResolutionSize_2);
@@ -771,8 +781,10 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
771781
this._setViewportMeta({"width": width}, true);
772782

773783
// Set body width to the exact pixel resolution
774-
document.documentElement.style.width = width + 'px';
775-
document.body.style.width = "100%";
784+
document.documentElement.style.width = width + "px";
785+
document.body.style.width = width + "px";
786+
document.body.style.left = "0px";
787+
document.body.style.top = "0px";
776788

777789
// Reset the resolution size and policy
778790
this.setDesignResolutionSize(width, height, resolutionPolicy);
@@ -985,7 +997,7 @@ cc.ContainerStrategy = cc.Class.extend(/** @lends cc.ContainerStrategy# */{
985997

986998
_setupContainer: function (view, w, h) {
987999
var locCanvas = cc.game.canvas, locContainer = cc.game.container;
988-
if (cc.sys.isMobile) {
1000+
if (cc.sys.os === cc.sys.OS_ANDROID) {
9891001
document.body.style.width = (view._isRotated ? h : w) + 'px';
9901002
document.body.style.height = (view._isRotated ? w : h) + 'px';
9911003
}

cocos2d/core/scenes/CCLoaderScene.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
cc.LoaderScene = cc.Scene.extend({
3434
_interval : null,
3535
_label : null,
36+
_logo : null,
3637
_className:"LoaderScene",
3738
cb: null,
3839
target: null,
@@ -132,7 +133,7 @@ cc.LoaderScene = cc.Scene.extend({
132133
this._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty);
133134
this._bgLayer._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty);
134135
this._label._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty);
135-
this._logo._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty);
136+
this._logo && this._logo._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty);
136137
}
137138
});
138139
/**

cocos2d/core/sprites/CCSpriteFrameCache.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ cc.spriteFrameCache = /** @lends cc.spriteFrameCache# */{
169169
var frame = frames[key];
170170
var spriteFrame = spriteFrames[key];
171171
if (!spriteFrame) {
172-
spriteFrame = new cc.SpriteFrame(texture, frame.rect, frame.rotated, frame.offset, frame.size);
172+
spriteFrame = new cc.SpriteFrame(texture, cc.rect(frame.rect), frame.rotated, frame.offset, frame.size);
173173
var aliases = frame.aliases;
174174
if (aliases) {//set aliases
175175
for (var i = 0, li = aliases.length; i < li; i++) {

cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,12 @@
235235
node._texture = texture;
236236

237237
// Update texture rect and blend func
238-
var texSize = texture._contentSize;
239-
var rect = cc.rect(0, 0, texSize.width, texSize.height);
240-
node.setTextureRect(rect);
241-
this._updateBlendFunc();
238+
if (texture) {
239+
var texSize = texture._contentSize;
240+
var rect = cc.rect(0, 0, texSize.width, texSize.height);
241+
node.setTextureRect(rect);
242+
this._updateBlendFunc();
243+
}
242244

243245
if (node._textureLoaded) {
244246
// Force refresh the render command list

cocos2d/core/support/CCPointExtension.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,5 +510,7 @@ cc.pAddIn = function(v1, v2) {
510510
* @param {cc.Point} v
511511
*/
512512
cc.pNormalizeIn = function(v) {
513-
cc.pMultIn(v, 1.0 / Math.sqrt(v.x * v.x + v.y * v.y));
513+
var n = Math.sqrt(v.x * v.x + v.y * v.y);
514+
if (n !== 0)
515+
cc.pMultIn(v, 1.0 / n);
514516
};

0 commit comments

Comments
 (0)