diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index 964f02165..b15e0f1d1 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -43,7 +43,7 @@ public class Skeleton { final Array bones; final Array slots; Array drawOrder; - final Array ikConstraints; + final Array ikConstraints, ikConstraintsSorted; final Array transformConstraints; final Array pathConstraints; final Array updateCache = new Array(); @@ -80,6 +80,7 @@ public class Skeleton { } ikConstraints = new Array(data.ikConstraints.size); + ikConstraintsSorted = new Array(ikConstraints.size); for (IkConstraintData ikConstraintData : data.ikConstraints) ikConstraints.add(new IkConstraint(ikConstraintData, this)); @@ -118,6 +119,7 @@ public class Skeleton { drawOrder.add(slots.get(slot.data.index)); ikConstraints = new Array(skeleton.ikConstraints.size); + ikConstraintsSorted = new Array(ikConstraints.size); for (IkConstraint ikConstraint : skeleton.ikConstraints) ikConstraints.add(new IkConstraint(ikConstraint, this)); @@ -147,8 +149,10 @@ public class Skeleton { for (int i = 0, n = bones.size; i < n; i++) bones.get(i).sorted = false; - // IK first, in hierarchy depth order. - Array ikConstraints = this.ikConstraints; + // IK first, lowest hierarchy depth first. + Array ikConstraints = this.ikConstraintsSorted; + ikConstraints.clear(); + ikConstraints.addAll(this.ikConstraints); int ikCount = ikConstraints.size; for (int i = 0, level, n = ikCount; i < n; i++) { IkConstraint ik = ikConstraints.get(i);