Skip to content

Commit 48f6318

Browse files
authored
Merge pull request #3358 from pandamicro/develop
Fix rendering issue for Armature using sprite as display in bone
2 parents acd8c4c + 6216079 commit 48f6318

File tree

5 files changed

+51
-18
lines changed

5 files changed

+51
-18
lines changed

cocos2d/core/platform/CCConfig.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* @type {String}
3232
* @name cc.ENGINE_VERSION
3333
*/
34-
window["CocosEngine"] = cc.ENGINE_VERSION = "Cocos2d-JS v3.12";
34+
window["CocosEngine"] = cc.ENGINE_VERSION = "Cocos2d-JS v3.13";
3535

3636
/**
3737
* <p>

extensions/cocostudio/armature/CCArmatureCanvasRenderCmd.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,14 @@
7777
var selBone = locChildren[i];
7878
var boneCmd = selBone._renderCmd;
7979
if (selBone && selBone.getDisplayRenderNode) {
80+
var boneType = selBone.getDisplayRenderNodeType();
8081
var selNode = selBone.getDisplayRenderNode();
8182
if (selNode && selNode._renderCmd){
8283
var cmd = selNode._renderCmd;
8384
cmd.transform(null); //must be null, use transform in armature mode
85+
if (boneType !== ccs.DISPLAY_TYPE_ARMATURE && boneType !== ccs.DISPLAY_TYPE_SPRITE) {
86+
cc.affineTransformConcatIn(cmd._worldTransform, selBone._worldTransform);
87+
}
8488

8589
//update displayNode's color and opacity, because skin didn't call visit()
8690
var flags = cc.Node._dirtyFlags, locFlag = cmd._dirtyFlag, boneFlag = boneCmd._dirtyFlag;
@@ -137,13 +141,13 @@
137141
boneCmd._syncStatus(this);
138142
switch (selBone.getDisplayRenderNodeType()) {
139143
case ccs.DISPLAY_TYPE_SPRITE:
140-
selNode.visit(boneCmd);
144+
selNode._renderCmd.visit(boneCmd);
141145
break;
142146
case ccs.DISPLAY_TYPE_ARMATURE:
143147
selNode._renderCmd.rendering(ctx, scaleX, scaleY);
144148
break;
145149
default:
146-
selNode.visit(boneCmd);
150+
selNode._renderCmd.visit(boneCmd);
147151
break;
148152
}
149153
} else if(selBone instanceof cc.Node) {

extensions/cocostudio/armature/CCArmatureWebGLRenderCmd.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
var alphaPremultiplied = cc.BlendFunc.ALPHA_PREMULTIPLIED, alphaNonPremultipled = cc.BlendFunc.ALPHA_NON_PREMULTIPLIED;
4545
for (var i = 0, len = locChildren.length; i < len; i++) {
4646
var selBone = locChildren[i];
47+
var boneCmd = selBone._renderCmd;
4748
if (selBone && selBone.getDisplayRenderNode) {
4849
var selNode = selBone.getDisplayRenderNode();
4950
if (null === selNode)
@@ -52,7 +53,6 @@
5253
switch (selBone.getDisplayRenderNodeType()) {
5354
case ccs.DISPLAY_TYPE_SPRITE:
5455
if (selNode instanceof ccs.Skin) {
55-
selBone._renderCmd._syncStatus(parentCmd);
5656
selNode.setShaderProgram(this._shaderProgram);
5757
this._updateColorAndOpacity(cmd, selBone); //because skin didn't call visit()
5858
cmd.transform(parentCmd);
@@ -77,31 +77,31 @@
7777
break;
7878
case ccs.DISPLAY_TYPE_ARMATURE:
7979
selNode.setShaderProgram(this._shaderProgram);
80-
cmd._parentCmd = parentCmd;
80+
cmd._parentCmd = this;
8181
// Continue rendering in default
8282
default:
83+
boneCmd._syncStatus(parentCmd);
84+
cmd._syncStatus(boneCmd);
8385
if (cmd.uploadData) {
8486
cc.renderer._uploadBufferData(cmd);
8587
}
86-
else {
88+
else if (cmd.rendering) {
8789
// Finish previous batch
8890
cc.renderer._batchRendering();
89-
cmd.transform(this);
9091
cmd.rendering(cc._renderContext);
9192
}
9293
break;
9394
}
9495
} else if (selBone instanceof cc.Node) {
9596
selBone.setShaderProgram(this._shaderProgram);
96-
cmd = selBone._renderCmd;
97-
cmd.transform(this);
98-
if (cmd.uploadData) {
99-
cc.renderer._uploadBufferData(cmd);
97+
boneCmd._syncStatus(parentCmd);
98+
if (boneCmd.uploadData) {
99+
cc.renderer._uploadBufferData(boneCmd);
100100
}
101-
else if (cmd.rendering) {
101+
else if (boneCmd.rendering) {
102102
// Finish previous batch
103103
cc.renderer._batchRendering();
104-
cmd.rendering(cc._renderContext);
104+
boneCmd.rendering(cc._renderContext);
105105
}
106106
}
107107
}

extensions/cocostudio/armature/CCBone.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ ccs.Bone = ccs.Node.extend(/** @lends ccs.Bone# */{
191191

192192
ccs.TransformHelp.nodeToMatrix(locWorldInfo, this._worldTransform);
193193
if (this._armatureParentBone)
194-
this._worldTransform = cc.affineTransformConcat(this._worldTransform, this._armature.getNodeToParentTransform()); //TODO TransformConcat
194+
cc.affineTransformConcatIn(this._worldTransform, this._armature.getNodeToParentTransform()); //TODO TransformConcat
195195
}
196196

197197
ccs.displayFactory.updateDisplay(this, delta, this._boneTransformDirty || this._armature.getArmatureTransformDirty());
@@ -685,6 +685,35 @@ ccs.Bone.RenderCmd = {
685685
displayCmd._syncDisplayOpacity(node._tweenData.a);
686686
displayCmd._updateColor();
687687
}
688+
},
689+
690+
transform: function (parentCmd, recursive) {
691+
var node = this._node,
692+
t = this._transform,
693+
wt = this._worldTransform,
694+
pt = parentCmd ? parentCmd._worldTransform : null;
695+
696+
if (pt) {
697+
this.originTransform();
698+
cc.affineTransformConcatIn(t, node._worldTransform);
699+
}
700+
701+
if (pt) {
702+
wt.a = t.a * pt.a + t.b * pt.c;
703+
wt.b = t.a * pt.b + t.b * pt.d;
704+
wt.c = t.c * pt.a + t.d * pt.c;
705+
wt.d = t.c * pt.b + t.d * pt.d;
706+
wt.tx = t.tx * pt.a + t.ty * pt.c + pt.tx;
707+
wt.ty = t.tx * pt.b + t.ty * pt.d + pt.ty;
708+
}
709+
else {
710+
wt.a = t.a;
711+
wt.b = t.b;
712+
wt.c = t.c;
713+
wt.d = t.d;
714+
wt.tx = t.tx;
715+
wt.ty = t.ty;
716+
}
688717
}
689718
};
690719

tools/build.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
classpath="./compiler/compiler.jar"/>
66
<target name="compile">
77
<jscomp compilationLevel="simple" warning="quiet"
8-
debug="false" output="./../lib/cocos2d-js-v3.12-min.js"
8+
debug="false" output="./../lib/cocos2d-js-v3.13-min.js"
99
languageIn="ECMASCRIPT5"
10-
sourceMapOutputFile="./../lib/cocos2d-js-v3.12-sourcemap" sourceMapFormat="V3">
10+
sourceMapOutputFile="./../lib/cocos2d-js-v3.13-sourcemap" sourceMapFormat="V3">
1111
<sources dir="./../">
1212
<file name="Base64Images.js"/>
1313
<file name="CCBoot.js"/>
@@ -306,9 +306,9 @@
306306

307307
<target name="compile_core">
308308
<jscomp compilationLevel="simple" warning="quiet"
309-
debug="false" output="./../lib/cocos2d-js-v3.12-core-min.js"
309+
debug="false" output="./../lib/cocos2d-js-v3.13-core-min.js"
310310
languageIn="ECMASCRIPT5"
311-
sourceMapOutputFile="./../lib/cocos2d-js-v3.12-core-sourcemap" sourceMapFormat="V3">
311+
sourceMapOutputFile="./../lib/cocos2d-js-v3.13-core-sourcemap" sourceMapFormat="V3">
312312
<sources dir="./../">
313313
<file name="cocos2d/core/utils/CCSimplePool.js"/>
314314
<file name="CCBoot.js"/>

0 commit comments

Comments
 (0)