Skip to content

Commit 353c5b5

Browse files
authored
Merge pull request #3477 from pandamicro/develop
Fix dirty flags not send down to invisible child nodes issue
2 parents 003dfae + cb5f827 commit 353c5b5

File tree

14 files changed

+96
-37
lines changed

14 files changed

+96
-37
lines changed

cocos2d/clipping-nodes/CCClippingNode.js

-3
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,6 @@ cc.ClippingNode = cc.Node.extend(/** @lends cc.ClippingNode# */{
128128
},
129129

130130
visit: function (parent) {
131-
if (!this._visible)
132-
return;
133-
134131
this._renderCmd.clippingVisit(parent && parent._renderCmd);
135132
},
136133

cocos2d/core/base-nodes/CCNode.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -2102,12 +2102,16 @@ cc.Node = cc.Class.extend(/** @lends cc.Node# */{
21022102
* @param {cc.Node} parent
21032103
*/
21042104
visit: function (parent) {
2105+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
2106+
21052107
// quick return if not visible
2106-
if (!this._visible)
2108+
if (!this._visible) {
2109+
cmd._propagateFlagsDown(parentCmd);
21072110
return;
2111+
}
21082112

2109-
var renderer = cc.renderer, cmd = this._renderCmd;
2110-
cmd.visit(parent && parent._renderCmd);
2113+
var renderer = cc.renderer;
2114+
cmd.visit(parentCmd);
21112115

21122116
var i, children = this._children, len = children.length, child;
21132117
if (len > 0) {

cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js

+16
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,22 @@ cc.Node.RenderCmd.prototype = {
442442
_updateColor: function () {
443443
},
444444

445+
_propagateFlagsDown: function (parentCmd) {
446+
var locFlag = this._dirtyFlag;
447+
var parentNode = parentCmd ? parentCmd._node : null;
448+
449+
if(parentNode && parentNode._cascadeColorEnabled && (parentCmd._dirtyFlag & dirtyFlags.colorDirty))
450+
locFlag |= dirtyFlags.colorDirty;
451+
452+
if(parentNode && parentNode._cascadeOpacityEnabled && (parentCmd._dirtyFlag & dirtyFlags.opacityDirty))
453+
locFlag |= dirtyFlags.opacityDirty;
454+
455+
if(parentCmd && (parentCmd._dirtyFlag & dirtyFlags.transformDirty))
456+
locFlag |= dirtyFlags.transformDirty;
457+
458+
this._dirtyFlag = locFlag;
459+
},
460+
445461
updateStatus: function () {
446462
var locFlag = this._dirtyFlag;
447463
var colorDirty = locFlag & dirtyFlags.colorDirty,

cocos2d/core/labelttf/CCLabelTTF.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -826,15 +826,18 @@ cc.LabelTTF = cc.Sprite.extend(/** @lends cc.LabelTTF# */{
826826
_t._rectRotated = rotated || false;
827827
_t.setContentSize(untrimmedSize || rect);
828828

829-
_t.setVertexRect(rect);
829+
var locRect = _t._rect;
830+
locRect.x = rect.x;
831+
locRect.y = rect.y;
832+
locRect.width = rect.width;
833+
locRect.height = rect.height;
830834
_t._renderCmd._setTextureCoords(rect, false);
831835

832836
var relativeOffsetX = _t._unflippedOffsetPositionFromCenter.x, relativeOffsetY = _t._unflippedOffsetPositionFromCenter.y;
833837
if (_t._flippedX)
834838
relativeOffsetX = -relativeOffsetX;
835839
if (_t._flippedY)
836840
relativeOffsetY = -relativeOffsetY;
837-
var locRect = _t._rect;
838841
_t._offsetPosition.x = relativeOffsetX + (rect.width - locRect.width) / 2;
839842
_t._offsetPosition.y = relativeOffsetY + (rect.height - locRect.height) / 2;
840843
},

cocos2d/core/layers/CCLayer.js

+14-6
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,16 @@ cc.Layer = cc.Node.extend(/** @lends cc.Layer# */{
7575
},
7676

7777
visit: function (parent) {
78+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
79+
7880
// quick return if not visible
79-
if (!this._visible)
81+
if (!this._visible) {
82+
cmd._propagateFlagsDown(parentCmd);
8083
return;
84+
}
8185

82-
var renderer = cc.renderer, cmd = this._renderCmd;
83-
cmd.visit(parent && parent._renderCmd);
86+
var renderer = cc.renderer;
87+
cmd.visit(parentCmd);
8488

8589
if (cmd._isBaked) {
8690
renderer.pushRenderCommand(cmd);
@@ -248,12 +252,16 @@ cc.LayerColor = cc.Layer.extend(/** @lends cc.LayerColor# */{
248252
},
249253

250254
visit: function (parent) {
255+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
256+
251257
// quick return if not visible
252-
if (!this._visible)
258+
if (!this._visible) {
259+
cmd._propagateFlagsDown(parentCmd);
253260
return;
261+
}
254262

255-
var renderer = cc.renderer, cmd = this._renderCmd;
256-
cmd.visit(parent && parent._renderCmd);
263+
var renderer = cc.renderer;
264+
cmd.visit(parentCmd);
257265

258266
if (cmd._isBaked) {
259267
renderer.pushRenderCommand(cmd._bakeRenderCmd);

cocos2d/core/platform/CCTypes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ cc.Color = function (r, g, b, a) {
3737
r = r || 0;
3838
g = g || 0;
3939
b = b || 0;
40-
a = a || 0;
40+
a = typeof a === 'number' ? a : 255;
4141
this._val = ((r << 24) >>> 0) + (g << 16) + (b << 8) + a;
4242
};
4343

cocos2d/particle/CCParticleBatchNode.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,15 @@ cc.ParticleBatchNode = cc.Node.extend(/** @lends cc.ParticleBatchNode# */{
148148
},
149149

150150
visit: function (parent) {
151+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
152+
151153
// quick return if not visible
152-
if (!this._visible)
154+
if (!this._visible) {
155+
cmd._propagateFlagsDown(parentCmd);
153156
return;
157+
}
154158

155-
var cmd = this._renderCmd;
156-
cmd.visit(parent && parent._renderCmd);
159+
cmd.visit(parentCmd);
157160
cc.renderer.pushRenderCommand(cmd);
158161
cmd._dirtyFlag = 0;
159162
},

cocos2d/render-texture/CCRenderTexture.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,17 @@ cc.RenderTexture = cc.Node.extend(/** @lends cc.RenderTexture# */{
133133
},
134134

135135
visit: function (parent) {
136+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
137+
136138
// quick return if not visible
137-
if (!this._visible)
139+
if (!this._visible) {
140+
cmd._propagateFlagsDown(parentCmd);
138141
return;
142+
}
139143

140-
var renderer = cc.renderer, cmd = this._renderCmd;
144+
var renderer = cc.renderer;
141145

142-
cmd.visit(parent && parent._renderCmd);
146+
cmd.visit(parentCmd);
143147
renderer.pushRenderCommand(cmd);
144148
this.sprite.visit(this);
145149
cmd._dirtyFlag = 0;

extensions/ccui/base-classes/CCProtectedNode.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,19 @@ cc.ProtectedNode = cc.Node.extend(/** @lends cc.ProtectedNode# */{
4747
},
4848

4949
visit: function (parent) {
50+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
51+
5052
// quick return if not visible
51-
if (!this._visible)
53+
if (!this._visible) {
54+
cmd._propagateFlagsDown(parentCmd);
5255
return;
56+
}
5357

54-
var renderer = cc.renderer, cmd = this._renderCmd;
58+
var renderer = cc.renderer;
5559
var i, children = this._children, len = children.length, child;
5660
var j, pChildren = this._protectedChildren, pLen = pChildren.length, pChild;
5761

58-
cmd.visit(parent && parent._renderCmd);
62+
cmd.visit(parentCmd);
5963

6064
var locGrid = this.grid;
6165
if (locGrid && locGrid._active)

extensions/ccui/layouts/UILayout.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,18 @@ ccui.Layout = ccui.Widget.extend(/** @lends ccui.Layout# */{
134134
* @param {cc.Node} [parent]
135135
*/
136136
visit: function (parent) {
137-
if (!this._visible)
137+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
138+
139+
// quick return if not visible
140+
if (!this._visible) {
141+
cmd._propagateFlagsDown(parentCmd);
138142
return;
143+
}
139144

140145
this._adaptRenderers();
141146
this._doLayout();
142147

143-
var renderer = cc.renderer, cmd = this._renderCmd;
144-
var parentCmd = parent && parent._renderCmd;
148+
var renderer = cc.renderer;
145149
cmd.visit(parentCmd);
146150

147151
var stencilClipping = this._clippingEnabled && this._clippingType === ccui.Layout.CLIPPING_STENCIL;

extensions/ccui/uiwidgets/scroll-widget/UIScrollView.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,18 @@ ccui.ScrollView = ccui.Layout.extend(/** @lends ccui.ScrollView# */{
124124
},
125125

126126
visit: function (parent) {
127-
if (!this._visible)
127+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
128+
129+
// quick return if not visible
130+
if (!this._visible) {
131+
cmd._propagateFlagsDown(parentCmd);
128132
return;
133+
}
129134

130135
this._adaptRenderers();
131136
this._doLayout();
132137

133-
var renderer = cc.renderer, cmd = this._renderCmd;
134-
var parentCmd = parent && parent._renderCmd;
138+
var renderer = cc.renderer;
135139
cmd.visit(parentCmd);
136140

137141
renderer.pushRenderCommand(cmd);

extensions/cocostudio/armature/CCArmature.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,16 @@ ccs.Armature = ccs.Node.extend(/** @lends ccs.Armature# */{
151151
},
152152

153153
visit: function (parent) {
154+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
155+
154156
// quick return if not visible
155-
if (!this._visible)
157+
if (!this._visible) {
158+
cmd._propagateFlagsDown(parentCmd);
156159
return;
160+
}
157161

158-
this._renderCmd.visit(parent && parent._renderCmd);
159-
this._renderCmd._dirtyFlag = 0;
162+
cmd.visit(parentCmd);
163+
cmd._dirtyFlag = 0;
160164
},
161165

162166
addChild: function (child, localZOrder, tag) {

extensions/cocostudio/timeline/CCSkeletonNode.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,14 @@ ccs.SkeletonNode = (function () {
145145
},
146146

147147
_visit: function (parentCmd) {
148-
if (!this._visible)
149-
return;
150148
var cmd = this._renderCmd;
151149
parentCmd = parentCmd || cmd.getParentRenderCmd();
150+
151+
// quick return if not visible
152+
if (!this._visible) {
153+
cmd._propagateFlagsDown(parentCmd);
154+
return;
155+
}
152156
cmd._syncStatus(parentCmd);
153157

154158
var i, node;

extensions/gui/scrollview/CCScrollView.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,16 @@ cc.ScrollView = cc.Layer.extend(/** @lends cc.ScrollView# */{
166166
},
167167

168168
visit: function (parent) {
169+
var cmd = this._renderCmd, parentCmd = parent ? parent._renderCmd : null;
170+
171+
// quick return if not visible
169172
if (!this._visible) {
173+
cmd._propagateFlagsDown(parentCmd);
170174
return;
171175
}
172176

173-
var renderer = cc.renderer, cmd = this._renderCmd;
174-
cmd.visit(parent && parent._renderCmd);
177+
var renderer = cc.renderer;
178+
cmd.visit(parentCmd);
175179

176180
if (this._clippingToBounds) {
177181
renderer.pushRenderCommand(cmd.startCmd);

0 commit comments

Comments
 (0)