From 669e5ede7132dea5982edb77324a71e96f2273d7 Mon Sep 17 00:00:00 2001 From: dingpinglv Date: Fri, 3 Jan 2014 20:49:41 +0800 Subject: [PATCH] fixed #3501: Modify sprite's draw for better performance. --- cocos2d/core/labelTTF/CCLabelTTF.js | 1 + cocos2d/core/sprite_nodes/CCSprite.js | 12 ++++++------ cocos2d/progress_timer/CCProgressTimer.js | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cocos2d/core/labelTTF/CCLabelTTF.js b/cocos2d/core/labelTTF/CCLabelTTF.js index 3304e2acc9..0fecf26ec2 100644 --- a/cocos2d/core/labelTTF/CCLabelTTF.js +++ b/cocos2d/core/labelTTF/CCLabelTTF.js @@ -905,6 +905,7 @@ cc.LabelTTF = cc.Sprite.extend(/** @lends cc.LabelTTF# */{ locTextureCoordRect.y = rect.y; locTextureCoordRect.width = rect.width; locTextureCoordRect.height = rect.height; + locTextureCoordRect.validRect = !(locTextureCoordRect.width === 0 || locTextureCoordRect.height === 0); var relativeOffset = this._unflippedOffsetPositionFromCenter; if (this._flippedX) diff --git a/cocos2d/core/sprite_nodes/CCSprite.js b/cocos2d/core/sprite_nodes/CCSprite.js index 8ae417ac76..c41cc0304f 100644 --- a/cocos2d/core/sprite_nodes/CCSprite.js +++ b/cocos2d/core/sprite_nodes/CCSprite.js @@ -979,7 +979,7 @@ cc.Sprite = cc.NodeRGBA.extend(/** @lends cc.Sprite# */{ this._newTextureWhenChangeColor = false; this._textureLoaded = true; this._loadedEventListeners = []; - this._textureRect_Canvas = {x: 0, y: 0, width: 0, height:0}; + this._textureRect_Canvas = {x: 0, y: 0, width: 0, height:0, validRect: false}; this._drawSize_Canvas = cc.size(0, 0); if (fileName) { @@ -1394,13 +1394,13 @@ cc.Sprite = cc.NodeRGBA.extend(/** @lends cc.Sprite# */{ this.setContentSize(untrimmedSize); this.setVertexRect(rect); - //this._textureRect_Canvas = cc.RECT_POINTS_TO_PIXELS(rect); //this._setTextureCoords(rect); - var locTextureRect = this._textureRect_Canvas; - var scaleFactor = cc.CONTENT_SCALE_FACTOR(); + + var locTextureRect = this._textureRect_Canvas, scaleFactor = cc.CONTENT_SCALE_FACTOR(); locTextureRect.x = 0 | (rect.x * scaleFactor); locTextureRect.y = 0 | (rect.y * scaleFactor); locTextureRect.width = 0 | (rect.width * scaleFactor); locTextureRect.height = 0 | (rect.height * scaleFactor); + locTextureRect.validRect = !(locTextureRect.width === 0 || locTextureRect.height === 0); var relativeOffset = this._unflippedOffsetPositionFromCenter; if (this._flippedX) @@ -1891,7 +1891,7 @@ cc.Sprite = cc.NodeRGBA.extend(/** @lends cc.Sprite# */{ _changeTextureColor: function () { var locElement, locTexture = this._texture, locRect = this._textureRect_Canvas; //this.getTextureRect(); - if (locTexture && locRect.width > 0 && this._originalTexture) { + if (locTexture && locRect.validRect && this._originalTexture) { locElement = locTexture.getHtmlElementObj(); if (!locElement) return; @@ -2099,7 +2099,7 @@ cc.Sprite = cc.NodeRGBA.extend(/** @lends cc.Sprite# */{ flipXOffset *= locEGL_ScaleX; flipYOffset *= locEGL_ScaleY; - if (this._texture && locTextureCoord.width > 0) { + if (this._texture && locTextureCoord.validRect) { var image = this._texture.getHtmlElementObj(); if (this._colorized) { context.drawImage(image, diff --git a/cocos2d/progress_timer/CCProgressTimer.js b/cocos2d/progress_timer/CCProgressTimer.js index 8e1e146a78..fee49e51c3 100644 --- a/cocos2d/progress_timer/CCProgressTimer.js +++ b/cocos2d/progress_timer/CCProgressTimer.js @@ -462,7 +462,7 @@ cc.ProgressTimer = cc.NodeRGBA.extend(/** @lends cc.ProgressTimer# */{ } //draw sprite - if (locSprite._texture && locRect.width > 0) { + if (locSprite._texture && locRect.validRect) { var image = locSprite._texture.getHtmlElementObj(); if (this._colorized) { context.drawImage(image,