diff --git a/spine-as3/spine-as3/src/spine/Skeleton.as b/spine-as3/spine-as3/src/spine/Skeleton.as index 39e99cfbf..5425c1471 100644 --- a/spine-as3/spine-as3/src/spine/Skeleton.as +++ b/spine-as3/spine-as3/src/spine/Skeleton.as @@ -82,16 +82,10 @@ public class Skeleton { var updateCache:Vector. = _updateCache; var ikConstraints:Vector. = this.ikConstraints; var transformConstraints:Vector. = this.transformConstraints; - updateCache.length = bones.length + ikConstraints.length + transformConstraints.length; + updateCache.length = bones.length + ikConstraints.length; var i:int = 0; for each (var bone:Bone in bones) { updateCache[i++] = bone; - for each (var transformConstraint:TransformConstraint in transformConstraints) { - if (bone == transformConstraint.bone) { - updateCache[i++] = transformConstraint; - break; - } - } for each (var ikConstraint:IkConstraint in ikConstraints) { if (bone == ikConstraint.bones[ikConstraint.bones.length - 1]) { updateCache[i++] = ikConstraint; @@ -99,6 +93,17 @@ public class Skeleton { } } } + + for each (var transformConstraint:TransformConstraint in transformConstraints) { + var ii:int; + for (ii = updateCache.length - 1; ii >= 0; i--) { + var updatable:Updatable = updateCache[ii]; + if (updateable == transformConstraint.bone || updateable == transformConstraint.target) { + updateCache.splice(ii + 1, 0, transformConstraint); + break; + } + } + } } /** Updates the world transform for each bone and applies constraints. */ diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index 76115e97c..a8cad1246 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -115,13 +115,6 @@ namespace Spine { for (int i = 0, n = bones.Count; i < n; i++) { Bone bone = bones.Items[i]; updateCache.Add(bone); - for (int ii = 0; ii < transformConstraintsCount; ii++) { - TransformConstraint transformConstraint = transformConstraints.Items[ii]; - if (bone == transformConstraint.bone) { - updateCache.Add(transformConstraint); - break; - } - } for (int ii = 0; ii < ikConstraintsCount; ii++) { IkConstraint ikConstraint = ikConstraints.Items[ii]; if (bone == ikConstraint.bones.Items[ikConstraint.bones.Count - 1]) { @@ -130,6 +123,17 @@ namespace Spine { } } } + + for (int i = 0; i < transformConstraintsCount; i++) { + TransformConstraint transformConstraint = transformConstraints.Items[i]; + for (int ii = updateCache.Count - 1; i >= 0; ii--) { + IUpdatable updateable = updateCache.Items[ii]; + if (updateable == transformConstraint.bone || updateable == transformConstraint.target) { + updateCache.Insert(ii + 1, transformConstraint); + break; + } + } + } } /// Updates the world transform for each bone and applies constraints.