소스 검색

[as3] Fixed Path/TransformConstraint handling of reflection

badlogic 8 년 전
부모
커밋
3666e7125a

BIN
spine-as3/spine-as3-example/lib/spine-as3.swc


+ 11 - 2
spine-as3/spine-as3/src/spine/PathConstraint.as

@@ -102,7 +102,14 @@ public class PathConstraint implements Constraint {
 		var positions:Vector.<Number> = 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);

+ 5 - 2
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.<Bone> = 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;

BIN
spine-starling/spine-starling-example/lib/spine-as3.swc


BIN
spine-starling/spine-starling/lib/spine-as3.swc