diff --git a/spine-as3/spine-as3/src/spine/animation/AnimationState.as b/spine-as3/spine-as3/src/spine/animation/AnimationState.as index 9a9a42404..53d14bdbc 100644 --- a/spine-as3/spine-as3/src/spine/animation/AnimationState.as +++ b/spine-as3/spine-as3/src/spine/animation/AnimationState.as @@ -128,10 +128,10 @@ public class AnimationState { var current:TrackEntry = _tracks[trackIndex]; if (!current) return; - _tracks[trackIndex] = null; - if (current.onEnd != null) current.onEnd(trackIndex); onEnd.invoke(trackIndex); + + _tracks[trackIndex] = null; } private function expandToIndex (index:int) : TrackEntry { diff --git a/spine-c/src/spine/AnimationState.c b/spine-c/src/spine/AnimationState.c index 0f2f78164..02331c5b0 100644 --- a/spine-c/src/spine/AnimationState.c +++ b/spine-c/src/spine/AnimationState.c @@ -181,11 +181,11 @@ void spAnimationState_clearTrack (spAnimationState* self, int trackIndex) { current = self->tracks[trackIndex]; if (!current) return; - self->tracks[trackIndex] = 0; - if (current->listener) current->listener(self, trackIndex, ANIMATION_END, 0, 0); if (self->listener) self->listener(self, trackIndex, ANIMATION_END, 0, 0); + self->tracks[trackIndex] = 0; + if (current->previous) _spTrackEntry_dispose(current->previous); _spTrackEntry_disposeAll(current); } diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index e91636be5..22cdbfc47 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -141,10 +141,10 @@ namespace Spine { TrackEntry current = tracks[trackIndex]; if (current == null) return; - tracks[trackIndex] = null; - current.OnEnd(this, trackIndex); if (End != null) End(this, trackIndex); + + tracks[trackIndex] = null; } private TrackEntry ExpandToIndex (int index) { diff --git a/spine-js/spine.js b/spine-js/spine.js index 12b6e571f..ccc10b5e5 100644 --- a/spine-js/spine.js +++ b/spine-js/spine.js @@ -1041,10 +1041,10 @@ spine.AnimationState.prototype = { var current = this.tracks[trackIndex]; if (!current) return; - this.tracks[trackIndex] = null; - if (current.onEnd != null) current.onEnd(trackIndex); if (this.onEnd != null) this.onEnd(trackIndex); + + this.tracks[trackIndex] = null; }, _expandToIndex: function (index) { if (index < this.tracks.length) return this.tracks[index]; diff --git a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index fe4a05a04..6bfb5fc3d 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -140,12 +140,12 @@ public class AnimationState { TrackEntry current = tracks.get(trackIndex); if (current == null) return; - tracks.set(trackIndex, null); - if (current.listener != null) current.listener.end(trackIndex); for (int i = 0, n = listeners.size; i < n; i++) listeners.get(i).end(trackIndex); + tracks.set(trackIndex, null); + freeAll(current); if (current.previous != null) trackEntryPool.free(current.previous); } diff --git a/spine-lua/AnimationState.lua b/spine-lua/AnimationState.lua index 21d577918..85a1d33f9 100644 --- a/spine-lua/AnimationState.lua +++ b/spine-lua/AnimationState.lua @@ -161,13 +161,13 @@ function AnimationState.new (data) local current = self.tracks[trackIndex] if not current then return end + if current.onEnd then current.onEnd(trackIndex) end + if self.onEnd then self.onEnd(trackIndex) end + self.tracks[trackIndex] = nil if trackIndex == self.trackCount - 1 then self.trackCount = self.trackCount - 1 end - - if current.onEnd then current.onEnd(trackIndex) end - if self.onEnd then self.onEnd(trackIndex) end end function self:setAnimationByName (trackIndex, animationName, loop)