From fb2a31b4cdc729c925cc2cd80f7c1db7fb013aa3 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:12:44 +0800 Subject: [PATCH 1/7] Fix clippingNodeRenderCmd setProgram issue --- .../clipping-nodes/CCClippingNodeWebGLRenderCmd.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js b/cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js index d563fb711c..6d8956a32b 100644 --- a/cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js +++ b/cocos2d/clipping-nodes/CCClippingNodeWebGLRenderCmd.js @@ -22,6 +22,17 @@ THE SOFTWARE. ****************************************************************************/ +function setProgram (node, program) { + node.shaderProgram = program; + + var children = node.children; + if (!children) + return; + + for (var i = 0; i < children.length; i++) + setProgram(children[i], program); +} + // ------------------------------- ClippingNode's WebGL render cmd ------------------------------ (function () { cc.ClippingNode.WebGLRenderCmd = function (renderable) { @@ -128,7 +139,7 @@ var node = this._node; if (node._stencil) { var program = node._originStencilProgram; - cc.setProgram(node._stencil, program); + setProgram(node._stencil, program); } }; From 4dfad9f8fcafc2448c7177e0a6039ebcd90ca291 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:14:14 +0800 Subject: [PATCH 2/7] Fix a bunch of issues --- cocos2d/core/CCDirector.js | 4 ++-- cocos2d/core/base-nodes/CCNode.js | 2 +- cocos2d/core/layers/CCLayer.js | 2 +- cocos2d/core/scenes/CCLoaderScene.js | 3 ++- cocos2d/core/sprites/CCSpriteFrameCache.js | 2 +- cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js | 10 ++++++---- .../cocostudio/loader/parsers/timelineParser-2.x.js | 8 ++++---- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/cocos2d/core/CCDirector.js b/cocos2d/core/CCDirector.js index b906a7fbd7..bfc8481d68 100644 --- a/cocos2d/core/CCDirector.js +++ b/cocos2d/core/CCDirector.js @@ -183,7 +183,7 @@ cc.Director = cc.Class.extend(/** @lends cc.Director# */{ convertToGL: function (uiPoint) { var docElem = document.documentElement; var view = cc.view; - var box = element.getBoundingClientRect(); + var box = docElem.getBoundingClientRect(); box.left += window.pageXOffset - docElem.clientLeft; box.top += window.pageYOffset - docElem.clientTop; var x = view._devicePixelRatio * (uiPoint.x - box.left); @@ -202,7 +202,7 @@ cc.Director = cc.Class.extend(/** @lends cc.Director# */{ convertToUI: function (glPoint) { var docElem = document.documentElement; var view = cc.view; - var box = element.getBoundingClientRect(); + var box = docElem.getBoundingClientRect(); box.left += window.pageXOffset - docElem.clientLeft; box.top += window.pageYOffset - docElem.clientTop; var uiPoint = {x: 0, y: 0}; diff --git a/cocos2d/core/base-nodes/CCNode.js b/cocos2d/core/base-nodes/CCNode.js index 2b62bc06c4..f13eaf6ae8 100644 --- a/cocos2d/core/base-nodes/CCNode.js +++ b/cocos2d/core/base-nodes/CCNode.js @@ -2015,7 +2015,7 @@ cc.Node = cc.Class.extend(/** @lends cc.Node# */{ updateTransform: function () { var children = this._children, node; for (var i = 0; i < children.length; i++) { - varnode = children[i]; + var node = children[i]; if (node) node.updateTransform(); } diff --git a/cocos2d/core/layers/CCLayer.js b/cocos2d/core/layers/CCLayer.js index db1e783a2e..626dcfc01a 100644 --- a/cocos2d/core/layers/CCLayer.js +++ b/cocos2d/core/layers/CCLayer.js @@ -247,7 +247,7 @@ cc.LayerColor = cc.Layer.extend(/** @lends cc.LayerColor# */{ return true; }, - visit: function () { + visit: function (parent) { // quick return if not visible if (!this._visible) return; diff --git a/cocos2d/core/scenes/CCLoaderScene.js b/cocos2d/core/scenes/CCLoaderScene.js index 12c482c476..2f051811b1 100644 --- a/cocos2d/core/scenes/CCLoaderScene.js +++ b/cocos2d/core/scenes/CCLoaderScene.js @@ -33,6 +33,7 @@ cc.LoaderScene = cc.Scene.extend({ _interval : null, _label : null, + _logo : null, _className:"LoaderScene", cb: null, target: null, @@ -132,7 +133,7 @@ cc.LoaderScene = cc.Scene.extend({ this._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); this._bgLayer._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); this._label._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); - this._logo._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); + this._logo && this._logo._renderCmd.setDirtyFlag(cc.Node._dirtyFlags.transformDirty); } }); /** diff --git a/cocos2d/core/sprites/CCSpriteFrameCache.js b/cocos2d/core/sprites/CCSpriteFrameCache.js index d8df34823b..7d38e89a5b 100644 --- a/cocos2d/core/sprites/CCSpriteFrameCache.js +++ b/cocos2d/core/sprites/CCSpriteFrameCache.js @@ -169,7 +169,7 @@ cc.spriteFrameCache = /** @lends cc.spriteFrameCache# */{ var frame = frames[key]; var spriteFrame = spriteFrames[key]; if (!spriteFrame) { - spriteFrame = new cc.SpriteFrame(texture, frame.rect, frame.rotated, frame.offset, frame.size); + spriteFrame = new cc.SpriteFrame(texture, cc.rect(frame.rect), frame.rotated, frame.offset, frame.size); var aliases = frame.aliases; if (aliases) {//set aliases for (var i = 0, li = aliases.length; i < li; i++) { diff --git a/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js b/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js index 79e0c4b58f..4a543a616c 100644 --- a/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js +++ b/cocos2d/core/sprites/CCSpriteWebGLRenderCmd.js @@ -235,10 +235,12 @@ node._texture = texture; // Update texture rect and blend func - var texSize = texture._contentSize; - var rect = cc.rect(0, 0, texSize.width, texSize.height); - node.setTextureRect(rect); - this._updateBlendFunc(); + if (texture) { + var texSize = texture._contentSize; + var rect = cc.rect(0, 0, texSize.width, texSize.height); + node.setTextureRect(rect); + this._updateBlendFunc(); + } if (node._textureLoaded) { // Force refresh the render command list diff --git a/extensions/cocostudio/loader/parsers/timelineParser-2.x.js b/extensions/cocostudio/loader/parsers/timelineParser-2.x.js index e79ab9b791..c823ce8737 100644 --- a/extensions/cocostudio/loader/parsers/timelineParser-2.x.js +++ b/extensions/cocostudio/loader/parsers/timelineParser-2.x.js @@ -1078,18 +1078,18 @@ * @returns {ccui.TextBMFont} */ parser.initTextBMFont = function (json, resourcePath) { - var widget = new ccui.TextBMFont(); this.widgetAttributes(widget, json); - var text = json["LabelText"]; - widget.setString(text); - loadTexture(json["LabelBMFontFile_CNB"], resourcePath, function (path, type) { if (!cc.loader.getRes(path)) cc.log("%s need to be pre loaded", path); widget.setFntFile(path); }); + + var text = json["LabelText"]; + widget.setString(text); + widget.ignoreContentAdaptWithSize(true); return widget; }; From ca0a6ae0b97866812b6eebf7d834dd4ed91e64fb Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:15:04 +0800 Subject: [PATCH 3/7] Use rAF instead of setTimeout for 30 fps --- CCBoot.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/CCBoot.js b/CCBoot.js index a048a028b3..0a7968264e 100644 --- a/CCBoot.js +++ b/CCBoot.js @@ -2330,6 +2330,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(); @@ -2512,8 +2513,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; } @@ -2551,20 +2553,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; }, From 37638e46240c95824eb67809b74f83ffae150bab Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:15:29 +0800 Subject: [PATCH 4/7] Improve webgl compatibility --- CCBoot.js | 5 +++-- cocos2d/shaders/CCGLProgram.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CCBoot.js b/CCBoot.js index 0a7968264e..48179d84e3 100644 --- a/CCBoot.js +++ b/CCBoot.js @@ -916,6 +916,7 @@ cc.loader = (function () { var self = this; var errorCallback = function () { + this.removeEventListener('load', loadCallback, false); this.removeEventListener('error', errorCallback, false); if (img.crossOrigin && img.crossOrigin.toLowerCase() === "anonymous") { @@ -1757,7 +1758,7 @@ var _initSys = function () { sys.browserVersion = ""; /* Determine the browser version number */ (function(){ - var versionReg1 = /(micromessenger|qq|mx|maxthon|baidu|sogou)(mobile)?(browser)?\/?([\d.]+)/i; + var versionReg1 = /(micromessenger|mqqbrowser|qq|maxthon|baidu|sogou)(mobile)?(browser)?\/?([\d.]+)/i; var versionReg2 = /(msie |rv:|firefox|chrome|ucbrowser|oupeng|opera|opr|safari|miui)(mobile)?(browser)?\/?([\d.]+)/i; var tmp = ua.match(versionReg1); if(!tmp) tmp = ua.match(versionReg2); @@ -1844,7 +1845,7 @@ var _initSys = function () { var tmpCanvas = document.createElement("CANVAS"); try{ var context = cc.create3DContext(tmpCanvas); - if (context && context.getShaderPrecisionFormat) { + if (context) { _supportWebGL = true; } diff --git a/cocos2d/shaders/CCGLProgram.js b/cocos2d/shaders/CCGLProgram.js index d9e59b109d..30c6176f11 100644 --- a/cocos2d/shaders/CCGLProgram.js +++ b/cocos2d/shaders/CCGLProgram.js @@ -795,8 +795,8 @@ cc.GLProgram.create = function (vShaderFileName, fShaderFileName) { cc.GLProgram._highpSupported = null; cc.GLProgram._isHighpSupported = function () { - if (cc.GLProgram._highpSupported == null) { - var ctx = cc._renderContext; + var ctx = cc._renderContext; + if (ctx.getShaderPrecisionFormat && cc.GLProgram._highpSupported == null) { var highp = ctx.getShaderPrecisionFormat(ctx.FRAGMENT_SHADER, ctx.HIGH_FLOAT); cc.GLProgram._highpSupported = highp.precision !== 0; } From 9f7810631a3c0c0e421d79cc964b3e74d4cb114e Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:20:33 +0800 Subject: [PATCH 5/7] Improve screen adaptation for iframe --- cocos2d/core/platform/CCEGLView.js | 46 +++++++++++++++++++----------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/cocos2d/core/platform/CCEGLView.js b/cocos2d/core/platform/CCEGLView.js index 37c89fd688..46d92f94b4 100755 --- a/cocos2d/core/platform/CCEGLView.js +++ b/cocos2d/core/platform/CCEGLView.js @@ -140,6 +140,7 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ _resizeCallback: null, _orientationChanging: true, + _resizing: false, _scaleX: 1, _originalScaleX: 1, @@ -187,8 +188,6 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ _t._viewName = "Cocos2dHTML5"; var sys = cc.sys; - _t.enableRetina(sys.os === sys.OS_IOS || sys.os === sys.OS_OSX); - _t.enableAutoFullScreen(sys.isMobile && sys.browserType !== sys.BROWSER_TYPE_BAIDU); cc.visibleRect && cc.visibleRect.init(_t._visibleRect); // Setup system default resolution policies @@ -212,15 +211,29 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ // Check frame size changed or not var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated; - view._initFrameSize(); + if (cc.sys.isMobile) { + var containerStyle = cc.game.container.style, + margin = containerStyle.margin; + containerStyle.margin = '0'; + containerStyle.display = 'none'; + view._initFrameSize(); + containerStyle.margin = margin; + containerStyle.display = 'block'; + } + else { + view._initFrameSize(); + } if (view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH) return; // Frame size changed, do resize works var width = view._originalDesignResolutionSize.width; var height = view._originalDesignResolutionSize.height; - if (width > 0) + view._resizing = true; + if (width > 0) { view.setDesignResolutionSize(width, height, view._resolutionPolicy); + } + view._resizing = false; cc.eventManager.dispatchCustomEvent('canvas-resize'); if (view._resizeCallback) { @@ -347,9 +360,11 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ cc.container.style.transformOrigin = '0px 0px 0px'; this._isRotated = true; } - setTimeout(function () { - cc.view._orientationChanging = false; - }, 1000); + if (this._orientationChanging) { + setTimeout(function () { + cc.view._orientationChanging = false; + }, 1000); + } }, // hack @@ -482,12 +497,6 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ return this._autoFullScreen; }, - /** - * Force destroying EGL view, subclass must implement this method. - */ - end: function () { - }, - /** * Get whether render system is ready(no matter opengl or canvas),
* 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# */{ // Permit to re-detect the orientation of device. this._orientationChanging = true; - this._initFrameSize(); + if (!this._resizing) + this._initFrameSize(); if (!policy) { cc.log(cc._LogInfos.EGLView_setDesignResolutionSize_2); @@ -771,8 +781,10 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ this._setViewportMeta({"width": width}, true); // Set body width to the exact pixel resolution - document.documentElement.style.width = width + 'px'; - document.body.style.width = "100%"; + document.documentElement.style.width = width + "px"; + document.body.style.width = width + "px"; + document.body.style.left = "0px"; + document.body.style.top = "0px"; // Reset the resolution size and policy this.setDesignResolutionSize(width, height, resolutionPolicy); @@ -985,7 +997,7 @@ cc.ContainerStrategy = cc.Class.extend(/** @lends cc.ContainerStrategy# */{ _setupContainer: function (view, w, h) { var locCanvas = cc.game.canvas, locContainer = cc.game.container; - if (cc.sys.isMobile) { + if (cc.sys.os === cc.sys.OS_ANDROID) { document.body.style.width = (view._isRotated ? h : w) + 'px'; document.body.style.height = (view._isRotated ? w : h) + 'px'; } From b8a85eaee3627d3eb639848d4bbb5746b5f03fda Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:20:48 +0800 Subject: [PATCH 6/7] Refactor ShaderCache implementation --- cocos2d/shaders/CCShaderCache.js | 41 +++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/cocos2d/shaders/CCShaderCache.js b/cocos2d/shaders/CCShaderCache.js index b064719f8d..462f208d21 100644 --- a/cocos2d/shaders/CCShaderCache.js +++ b/cocos2d/shaders/CCShaderCache.js @@ -110,10 +110,25 @@ cc.shaderCache = /** @lends cc.shaderCache# */{ */ TYPE_MAX: 11, + _keyMap: [ + cc.SHADER_POSITION_TEXTURECOLOR, + cc.SHADER_POSITION_TEXTURECOLORALPHATEST, + cc.SHADER_POSITION_COLOR, + cc.SHADER_POSITION_TEXTURE, + cc.SHADER_POSITION_TEXTURE_UCOLOR, + cc.SHADER_POSITION_TEXTUREA8COLOR, + cc.SHADER_POSITION_UCOLOR, + cc.SHADER_POSITION_LENGTHTEXTURECOLOR, + cc.SHADER_SPRITE_POSITION_TEXTURECOLOR, + cc.SHADER_SPRITE_POSITION_TEXTURECOLORALPHATEST, + cc.SHADER_SPRITE_POSITION_COLOR, + cc.SHADER_SPRITE_POSITION_TEXTURECOLOR_GRAY + ], + _programs: {}, _init: function () { - // this.loadDefaultShaders(); + this.loadDefaultShaders(); return true; }, @@ -200,6 +215,10 @@ cc.shaderCache = /** @lends cc.shaderCache# */{ * loads the default shaders */ loadDefaultShaders: function () { + for (var i = 0; i < this.TYPE_MAX; ++i) { + var key = this._keyMap[i]; + this.programForKey(key); + } }, /** @@ -211,62 +230,62 @@ cc.shaderCache = /** @lends cc.shaderCache# */{ // Position Texture Color shader var program = this.programForKey(cc.SHADER_POSITION_TEXTURECOLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURECOLOR); + this._loadDefaultShader(program, cc.SHADER_POSITION_TEXTURECOLOR); // Sprite Position Texture Color shader program = this.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_SPRITE_POSITION_TEXTURECOLOR); + this._loadDefaultShader(program, cc.SHADER_SPRITE_POSITION_TEXTURECOLOR); // Position Texture Color alpha test program = this.programForKey(cc.SHADER_POSITION_TEXTURECOLORALPHATEST); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURECOLOR_ALPHATEST); + this._loadDefaultShader(program, cc.SHADER_POSITION_TEXTURECOLORALPHATEST); // Sprite Position Texture Color alpha shader program = this.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLORALPHATEST); program.reset(); - this._loadDefaultShader(program, this.TYPE_SPRITE_POSITION_TEXTURECOLOR_ALPHATEST); + this._loadDefaultShader(program, cc.SHADER_SPRITE_POSITION_TEXTURECOLORALPHATEST); // // Position, Color shader // program = this.programForKey(cc.SHADER_POSITION_COLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_COLOR); + this._loadDefaultShader(program, cc.SHADER_POSITION_COLOR); // // Position Texture shader // program = this.programForKey(cc.SHADER_POSITION_TEXTURE); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURE); + this._loadDefaultShader(program, cc.SHADER_POSITION_TEXTURE); //Position Texture Gray shader program = this.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_GRAY_FRAG); program.reset(); - this._loadDefaultShader(program, this.TYPE_SPRITE_POSITION_TEXTURECOLOR_GRAY); + this._loadDefaultShader(program, cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_GRAY_FRAG); // // Position, Texture attribs, 1 Color as uniform shader // program = this.programForKey(cc.SHADER_POSITION_TEXTURE_UCOLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURE_UCOLOR); + this._loadDefaultShader(program, cc.SHADER_POSITION_TEXTURE_UCOLOR); // // Position Texture A8 Color shader // program = this.programForKey(cc.SHADER_POSITION_TEXTUREA8COLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURE_A8COLOR); + this._loadDefaultShader(program, cc.SHADER_POSITION_TEXTUREA8COLOR); // // Position and 1 color passed as a uniform (to similate glColor4ub ) // program = this.programForKey(cc.SHADER_POSITION_UCOLOR); program.reset(); - this._loadDefaultShader(program, this.TYPE_POSITION_UCOLOR); + this._loadDefaultShader(program, cc.SHADER_POSITION_UCOLOR); }, /** From 1fec2d2ece083d631862386289f3290295b46db8 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Wed, 15 Mar 2017 16:21:04 +0800 Subject: [PATCH 7/7] Fix draw node calculation issues --- cocos2d/core/support/CCPointExtension.js | 4 +++- cocos2d/shape-nodes/CCDrawNode.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cocos2d/core/support/CCPointExtension.js b/cocos2d/core/support/CCPointExtension.js index d2ea212435..3171a5f7ea 100644 --- a/cocos2d/core/support/CCPointExtension.js +++ b/cocos2d/core/support/CCPointExtension.js @@ -510,5 +510,7 @@ cc.pAddIn = function(v1, v2) { * @param {cc.Point} v */ cc.pNormalizeIn = function(v) { - cc.pMultIn(v, 1.0 / Math.sqrt(v.x * v.x + v.y * v.y)); + var n = Math.sqrt(v.x * v.x + v.y * v.y); + if (n !== 0) + cc.pMultIn(v, 1.0 / n); }; diff --git a/cocos2d/shape-nodes/CCDrawNode.js b/cocos2d/shape-nodes/CCDrawNode.js index 732bd8cda8..d0843ec6b6 100644 --- a/cocos2d/shape-nodes/CCDrawNode.js +++ b/cocos2d/shape-nodes/CCDrawNode.js @@ -570,7 +570,7 @@ cc.game.addEventListener(cc.game.EVENT_RENDERER_INITED, function () { // Copy old data if (prev !== 0 && prevOffset !== offset) { // offset is in byte, we need to transform to float32 index - var last = (prevOffset + prev) / 4; + var last = prevOffset / 4 + prev * FLOAT_PER_VERTEX; for (var i = offset / 4, j = prevOffset / 4; j < last; i++, j++) { _sharedBuffer.dataArray[i] = _sharedBuffer.dataArray[j]; }