diff --git a/cocos2d/core/base-nodes/CCNode.js b/cocos2d/core/base-nodes/CCNode.js index 088f670521..abde4d1227 100644 --- a/cocos2d/core/base-nodes/CCNode.js +++ b/cocos2d/core/base-nodes/CCNode.js @@ -1288,6 +1288,7 @@ cc.Node = cc.Class.extend(/** @lends cc.Node# */{ if (this._isTransitionFinished) child.onEnterTransitionDidFinish(); } + child._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); if (this._cascadeColorEnabled) child._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.colorDirty); if (this._cascadeOpacityEnabled) diff --git a/cocos2d/core/event-manager/CCEventManager.js b/cocos2d/core/event-manager/CCEventManager.js index 05098097ee..6afe2e6e13 100644 --- a/cocos2d/core/event-manager/CCEventManager.js +++ b/cocos2d/core/event-manager/CCEventManager.js @@ -436,11 +436,15 @@ cc.eventManager = /** @lends cc.eventManager# */{ if(sceneGraphPriorityListeners){ idx = sceneGraphPriorityListeners.indexOf(selListener); - sceneGraphPriorityListeners.splice(idx, 1); + if (idx !== -1) { + sceneGraphPriorityListeners.splice(idx, 1); + } } if(fixedPriorityListeners){ idx = fixedPriorityListeners.indexOf(selListener); - fixedPriorityListeners.splice(idx, 1); + if (idx !== -1) { + fixedPriorityListeners.splice(idx, 1); + } } } toRemovedListeners.length = 0; diff --git a/cocos2d/core/platform/CCInputExtension.js b/cocos2d/core/platform/CCInputExtension.js index 83b7fad5df..6f780104b1 100644 --- a/cocos2d/core/platform/CCInputExtension.js +++ b/cocos2d/core/platform/CCInputExtension.js @@ -108,13 +108,8 @@ _p.didAccelerate = function (eventData) { z = (eventData["alpha"] / 90) * 0.981; } - if(cc.sys.os === cc.sys.OS_ANDROID){ - mAcceleration.x = -x; - mAcceleration.y = -y; - }else{ - mAcceleration.x = x; - mAcceleration.y = y; - } + mAcceleration.x = x; + mAcceleration.y = y; mAcceleration.z = z; mAcceleration.timestamp = eventData.timeStamp || Date.now(); diff --git a/cocos2d/core/renderer/RendererWebGL.js b/cocos2d/core/renderer/RendererWebGL.js index 3317335fee..05b0a346ff 100644 --- a/cocos2d/core/renderer/RendererWebGL.js +++ b/cocos2d/core/renderer/RendererWebGL.js @@ -127,7 +127,9 @@ function createVirtualBuffer (buffer, vertexOffset, totalBufferSize, count, data // Total vertex array buffer size, including vertex data, in bytes totalBufferSize: totalBufferSize, // Render command count - count: count + count: count, + // Valid flag, indicate whether the buffer is valid or not + valid: true }; return vBuf; } @@ -387,7 +389,7 @@ return { currBuf = cmd1._vBuffer; matched = false; // Check to update virtual buffer - if (currBuf) { + if (currBuf && currBuf.valid) { j = cmd1._currId; // Removed from the command list if (j < 0 || j >= currLen) { @@ -497,7 +499,7 @@ return { _currentBuffer = null; // Protection, vbuffer invalid or doesn't match the command - if (cmd._vertexOffset !== vbuffer.vertexOffset || !vbuffer.buffer) { + if (cmd._vertexOffset !== vbuffer.vertexOffset || !vbuffer.valid || !vbuffer.buffer) { _bufferError = true; return 0; } diff --git a/cocos2d/core/sprites/CCSpriteCanvasRenderCmd.js b/cocos2d/core/sprites/CCSpriteCanvasRenderCmd.js index 0c1fe6d9f9..572141bb16 100644 --- a/cocos2d/core/sprites/CCSpriteCanvasRenderCmd.js +++ b/cocos2d/core/sprites/CCSpriteCanvasRenderCmd.js @@ -149,7 +149,7 @@ w = locWidth * scaleX; h = locHeight * scaleY; - if (texture) { + if (texture && texture._htmlElementObj) { image = texture._htmlElementObj; if (texture._pattern !== "") { wrapper.setFillStyle(context.createPattern(image, texture._pattern)); diff --git a/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js b/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js index 414cb75eff..5594121580 100644 --- a/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js +++ b/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js @@ -87,6 +87,12 @@ info.shader = this.batchShader; }; + proto._invalidBatch = function () { + if (this._vBuffer) { + this._vBuffer.valid = false; + } + }; + proto.updateBuffer = function () { if (!this._buffer) { var length = this.vertexBytesPerUnit; @@ -390,6 +396,7 @@ } node.opacityModifyRGB = true; } + this._invalidBatch(); }; proto._setTexture = function (texture) { @@ -404,6 +411,7 @@ if(node._texture !== texture){ node._textureLoaded = texture ? texture._textureLoaded : false; node._texture = texture; + // This will invalid current batch this._updateBlendFunc(); } } diff --git a/cocos2d/core/utils/CCProfiler.js b/cocos2d/core/utils/CCProfiler.js index c52b2dcfbd..e84c76dec1 100644 --- a/cocos2d/core/utils/CCProfiler.js +++ b/cocos2d/core/utils/CCProfiler.js @@ -124,13 +124,17 @@ cc.profiler = (function () { this.init(); } - cc.container.appendChild(_fps); + if (_fps.parentElement === null) { + cc.container.appendChild(_fps); + } _showFPS = true; }, hideStats: function () { _showFPS = false; - cc.container.removeChild(_fps); + if (_fps.parentElement === cc.container) { + cc.container.removeChild(_fps); + } }, init: function () {