diff --git a/spine-as3/spine-as3-example/lib/spine-as3.swc b/spine-as3/spine-as3-example/lib/spine-as3.swc index 33938609a..00486d2a2 100644 Binary files a/spine-as3/spine-as3-example/lib/spine-as3.swc and b/spine-as3/spine-as3-example/lib/spine-as3.swc differ diff --git a/spine-as3/spine-as3/src/spine/PathConstraint.as b/spine-as3/spine-as3/src/spine/PathConstraint.as index 566b94555..61f84a3b8 100644 --- a/spine-as3/spine-as3/src/spine/PathConstraint.as +++ b/spine-as3/spine-as3/src/spine/PathConstraint.as @@ -102,7 +102,14 @@ public class PathConstraint implements Constraint { var positions:Vector. = computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == PositionMode.percent, spacingMode == SpacingMode.percent); var boneX:Number = positions[0], boneY:Number = positions[1], offsetRotation:Number = data.offsetRotation; - var tip:Boolean = rotateMode == RotateMode.chain && offsetRotation == 0; + var tip:Boolean = false; + if (offsetRotation == 0) + tip = rotateMode == RotateMode.chain; + else { + tip = false; + var pa:Bone = target.bone; + offsetRotation *= pa.a * pa.d - pa.b * pa.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } var p:Number; for (i = 0, p = 3; i < boneCount; i++, p += 3) { bone = bones[i]; @@ -127,13 +134,15 @@ public class PathConstraint implements Constraint { r = positions[p + 2]; else r = Math.atan2(dy, dx); - r -= Math.atan2(c, a) - offsetRotation * MathUtils.degRad; + r -= Math.atan2(c, a); if (tip) { cos = Math.cos(r); sin = Math.sin(r); length = bone.data.length; boneX += (length * (cos * a - sin * c) - dx) * rotateMix; boneY += (length * (sin * a + cos * c) - dy) * rotateMix; + } else { + r += offsetRotation; } if (r > Math.PI) r -= (Math.PI * 2); diff --git a/spine-as3/spine-as3/src/spine/TransformConstraint.as b/spine-as3/spine-as3/src/spine/TransformConstraint.as index a5e40ebba..cff6571ff 100644 --- a/spine-as3/spine-as3/src/spine/TransformConstraint.as +++ b/spine-as3/spine-as3/src/spine/TransformConstraint.as @@ -62,6 +62,9 @@ public class TransformConstraint implements Constraint { var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix; var target:Bone = this.target; var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d; + var degRadReflect:Number = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + var offsetRotation:Number = data.offsetRotation * degRadReflect; + var offsetShearY:Number = data.offsetShearY * degRadReflect; var bones:Vector. = this._bones; for (var i:int = 0, n:int = bones.length; i < n; i++) { var bone:Bone = bones[i]; @@ -69,7 +72,7 @@ public class TransformConstraint implements Constraint { if (rotateMix != 0) { var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d; - var r:Number = Math.atan2(tc, ta) - Math.atan2(c, a) + data.offsetRotation * MathUtils.degRad; + var r:Number = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; if (r > Math.PI) r -= Math.PI * 2; else if (r < -Math.PI) r += Math.PI * 2; @@ -112,7 +115,7 @@ public class TransformConstraint implements Constraint { if (r > Math.PI) r -= Math.PI * 2; else if (r < -Math.PI) r += Math.PI * 2; - r = by + (r + data.offsetShearY * MathUtils.degRad) * shearMix; + r = by + (r + offsetShearY) * shearMix; s = Math.sqrt(b * b + d * d); bone._b = Math.cos(r) * s; bone._d = Math.sin(r) * s; diff --git a/spine-starling/spine-starling-example/lib/spine-as3.swc b/spine-starling/spine-starling-example/lib/spine-as3.swc index 33938609a..00486d2a2 100644 Binary files a/spine-starling/spine-starling-example/lib/spine-as3.swc and b/spine-starling/spine-starling-example/lib/spine-as3.swc differ diff --git a/spine-starling/spine-starling/lib/spine-as3.swc b/spine-starling/spine-starling/lib/spine-as3.swc index 33938609a..00486d2a2 100644 Binary files a/spine-starling/spine-starling/lib/spine-as3.swc and b/spine-starling/spine-starling/lib/spine-as3.swc differ