瀏覽代碼

Fixed 1-bone IK for transform mode noRotationOrReflection when skeleton scale is applied.

Nathan Sweet 5 年之前
父節點
當前提交
5cab7e9460
共有 1 個文件被更改,包括 6 次插入4 次删除
  1. 6 4
      spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java

+ 6 - 4
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java

@@ -185,10 +185,12 @@ public class IkConstraint implements Updatable {
 			ty = targetY - bone.worldY;
 			break;
 		case noRotationOrReflection:
-			rotationIK += atan2(pc, pa) * radDeg;
-			float ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
-			pb = -pc * ps;
-			pd = pa * ps;
+			float s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
+			float sa = pa / bone.skeleton.scaleX;
+			float sc = pc / bone.skeleton.scaleY;
+			pb = -sc * s * bone.skeleton.scaleX;
+			pd = sa * s * bone.skeleton.scaleY;
+			rotationIK += atan2(sc, sa) * radDeg;
 			// Fall through.
 		default:
 			float x = targetX - p.worldX, y = targetY - p.worldY;