Skip to content

Commit 11d1fc4

Browse files
committed
Fix armature status sync issue
1 parent 46c5193 commit 11d1fc4

File tree

3 files changed

+33
-17
lines changed

3 files changed

+33
-17
lines changed

extensions/cocostudio/armature/CCArmatureCanvasRenderCmd.js

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,21 +75,34 @@
7575
var locChildren = this._node._children;
7676
for (var i = 0, len = locChildren.length; i< len; i++) {
7777
var selBone = locChildren[i];
78+
var boneCmd = selBone._renderCmd;
7879
if (selBone && selBone.getDisplayRenderNode) {
7980
var selNode = selBone.getDisplayRenderNode();
8081
if (selNode && selNode._renderCmd){
8182
var cmd = selNode._renderCmd;
8283
cmd.transform(null); //must be null, use transform in armature mode
8384

8485
//update displayNode's color and opacity, because skin didn't call visit()
86+
var flags = cc.Node._dirtyFlags, locFlag = cmd._dirtyFlag, boneFlag = boneCmd._dirtyFlag;
87+
var colorDirty = boneFlag & flags.colorDirty,
88+
opacityDirty = boneFlag & flags.opacityDirty;
89+
if (colorDirty)
90+
boneCmd._updateDisplayColor();
91+
if (opacityDirty)
92+
boneCmd._updateDisplayOpacity();
93+
if (colorDirty || opacityDirty)
94+
boneCmd._updateColor();
95+
8596
var parentColor = selBone._renderCmd._displayedColor, parentOpacity = selBone._renderCmd._displayedOpacity;
86-
var flags = cc.Node._dirtyFlags, locFlag = cmd._dirtyFlag;
87-
var colorDirty = locFlag & flags.colorDirty,
88-
opacityDirty = locFlag & flags.opacityDirty;
89-
if(colorDirty)
97+
colorDirty = locFlag & flags.colorDirty;
98+
opacityDirty = locFlag & flags.opacityDirty;
99+
if (colorDirty)
90100
cmd._updateDisplayColor(parentColor);
91-
if(opacityDirty)
101+
if (opacityDirty)
92102
cmd._updateDisplayOpacity(parentOpacity);
103+
if (colorDirty || opacityDirty) {
104+
cmd._updateColor();
105+
}
93106
}
94107
}
95108
}
@@ -120,27 +133,28 @@
120133
if (null === selNode)
121134
continue;
122135

136+
var boneCmd = selBone._renderCmd;
137+
boneCmd._syncStatus(this);
123138
switch (selBone.getDisplayRenderNodeType()) {
124139
case ccs.DISPLAY_TYPE_SPRITE:
125-
if(selNode instanceof ccs.Skin)
126-
this.updateChildPosition(selNode, selBone, alphaPremultiplied, alphaNonPremultipled);
140+
selNode.visit(boneCmd);
127141
break;
128142
case ccs.DISPLAY_TYPE_ARMATURE:
129143
selNode._renderCmd.rendering(ctx, scaleX, scaleY);
130144
break;
131145
default:
132-
selNode.visit(this);
146+
selNode.visit(boneCmd);
133147
break;
134148
}
135149
} else if(selBone instanceof cc.Node) {
136150
this._visitNormalChild(selBone);
137-
//selBone.visit(this);
151+
// selBone.visit(this);
138152
}
139153
}
140154
};
141155

142156
proto._visitNormalChild = function(childNode){
143-
if(childNode == null)
157+
if (!childNode)
144158
return;
145159

146160
var cmd = childNode._renderCmd;
@@ -181,7 +195,7 @@
181195
if (!node._visible)
182196
return;
183197

184-
this.updateStatus(parentCmd);
198+
this._syncStatus(parentCmd);
185199
node.sortAllChildren();
186200

187201
cc.renderer.pushRenderCommand(this._startRenderCmd);

extensions/cocostudio/armature/CCArmatureWebGLRenderCmd.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
switch (selBone.getDisplayRenderNodeType()) {
5353
case ccs.DISPLAY_TYPE_SPRITE:
5454
if (selNode instanceof ccs.Skin) {
55+
selBone._renderCmd._syncStatus(parentCmd);
5556
selNode.setShaderProgram(this._shaderProgram);
5657
this._updateColorAndOpacity(cmd, selBone); //because skin didn't call visit()
5758
cmd.transform(parentCmd);
@@ -76,7 +77,7 @@
7677
break;
7778
case ccs.DISPLAY_TYPE_ARMATURE:
7879
selNode.setShaderProgram(this._shaderProgram);
79-
cmd._parentCmd = this;
80+
cmd._parentCmd = parentCmd;
8081
// Continue rendering in default
8182
default:
8283
if (cmd.uploadData) {
@@ -119,6 +120,7 @@
119120
proto._updateColorAndOpacity = function(skinRenderCmd, bone){
120121
//update displayNode's color and opacity
121122
var parentColor = bone._renderCmd._displayedColor, parentOpacity = bone._renderCmd._displayedOpacity;
123+
122124
var flags = cc.Node._dirtyFlags, locFlag = skinRenderCmd._dirtyFlag;
123125
var colorDirty = locFlag & flags.colorDirty,
124126
opacityDirty = locFlag & flags.opacityDirty;

extensions/cocostudio/armature/CCBone.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -674,15 +674,15 @@ ccs.Bone.create = function (name) {
674674
};
675675

676676
ccs.Bone.RenderCmd = {
677-
_updateColor: function(){
677+
_updateColor: function () {
678678
var node = this._node;
679679
var display = node._displayManager.getDisplayRenderNode();
680680
if (display !== null) {
681681
var displayCmd = display._renderCmd;
682-
display.setColor(cc.color( node._tweenData.r, node._tweenData.g, node._tweenData.g));
683-
display.setOpacity(node._tweenData.a);
684-
displayCmd._syncDisplayColor(this._displayedColor);
685-
displayCmd._syncDisplayOpacity(this._displayedOpacity);
682+
display.setColor(this._displayedColor);
683+
display.setOpacity(this._displayedOpacity);
684+
displayCmd._syncDisplayColor(node._tweenData);
685+
displayCmd._syncDisplayOpacity(node._tweenData.a);
686686
displayCmd._updateColor();
687687
}
688688
}

0 commit comments

Comments
 (0)