Przeglądaj źródła

Fixed clearing tracks in event callbacks.

closes #134
NathanSweet 12 lat temu
rodzic
commit
97f9b7e4d2

+ 2 - 0
spine-c/src/spine/AnimationState.c

@@ -107,6 +107,7 @@ void spAnimationState_update (spAnimationState* self, float delta) {
 			int count = (int)(time / endTime);
 			if (current->listener) current->listener(self, i, ANIMATION_COMPLETE, 0, count);
 			if (self->listener) self->listener(self, i, ANIMATION_COMPLETE, 0, count);
+			if (i >= self->trackCount || !self->tracks[i]) continue;
 		}
 
 		if (current->next) {
@@ -160,6 +161,7 @@ void spAnimationState_apply (spAnimationState* self, spSkeleton* skeleton) {
 			if (self->listener) self->listener(self, i, ANIMATION_EVENT, event, 0);
 		}
 
+		if (i >= self->trackCount || !self->tracks[i]) continue;
 		current->lastTime = current->time;
 	}
 }

+ 1 - 1
spine-csharp/src/AnimationState.cs

@@ -57,7 +57,7 @@ namespace Spine {
 
 		public void Update (float delta) {
 			delta *= timeScale;
-			for (int i = 0, n = tracks.Count; i < n; i++) {
+			for (int i = 0; i < tracks.Count; i++) {
 				TrackEntry current = tracks[i];
 				if (current == null) continue;
 

+ 1 - 1
spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java

@@ -52,7 +52,7 @@ public class AnimationState {
 
 	public void update (float delta) {
 		delta *= timeScale;
-		for (int i = 0, n = tracks.size; i < n; i++) {
+		for (int i = 0; i < tracks.size; i++) {
 			TrackEntry current = tracks.get(i);
 			if (current == null) continue;