Parcourir la source

[as3] Fixed event registration, see http://esotericsoftware.com/forum/Runtimes-spine-AS3-major-bug-callbacks-8045

badlogic il y a 8 ans
Parent
commit
60bbfce2fc

BIN
spine-as3/spine-as3-example/lib/spine-as3.swc


+ 15 - 8
spine-as3/spine-as3-example/src/spine/examples/Main.as

@@ -29,6 +29,7 @@
  *****************************************************************************/
 
 package spine.examples {
+	import spine.animation.TrackEntry;
 	import flash.display.Sprite;
 
 	import spine.*;
@@ -65,17 +66,23 @@ package spine.examples {
 			skeleton.x = 400;
 			skeleton.y = 560;
 
-			skeleton.state.onStart.add(function(trackIndex : int) : void {
-				trace(trackIndex + " fuu start: " + skeleton.state.getCurrent(trackIndex));
+			skeleton.state.onStart.add(function(entry : TrackEntry) : void {
+				trace(entry.trackIndex + " start: " + entry.animation.name);
 			});
-			skeleton.state.onEnd.add(function(trackIndex : int) : void {
-				trace(trackIndex + " end: " + skeleton.state.getCurrent(trackIndex));
+			skeleton.state.onInterrupt.add(function(entry : TrackEntry) : void {
+				trace(entry.trackIndex + " interrupt: " + entry.animation.name);
 			});
-			skeleton.state.onComplete.add(function(trackIndex : int, count : int) : void {
-				trace(trackIndex + " complete: " + skeleton.state.getCurrent(trackIndex) + ", " + count);
+			skeleton.state.onEnd.add(function(entry : TrackEntry) : void {
+				trace(entry.trackIndex + " end: " + entry.animation.name);
 			});
-			skeleton.state.onEvent.add(function(trackIndex : int, event : Event) : void {
-				trace(trackIndex + " event: " + skeleton.state.getCurrent(trackIndex) + ", " + event.data.name + ": " + event.intValue + ", " + event.floatValue + ", " + event.stringValue);
+			skeleton.state.onComplete.add(function(entry : TrackEntry) : void {
+				trace(entry.trackIndex + " complete: " + entry.animation.name);
+			});
+			skeleton.state.onDispose.add(function(entry : TrackEntry) : void {
+				trace(entry.trackIndex + " dispose: " + entry.animation.name);
+			});
+			skeleton.state.onEvent.add(function(entry : TrackEntry, event : Event) : void {
+				trace(entry.trackIndex + " event: " + entry.animation.name + ", " + event.data.name + ": " + event.intValue + ", " + event.floatValue + ", " + event.stringValue);
 			});
 
 			if (false) {

+ 7 - 0
spine-as3/spine-as3/src/spine/flash/SkeletonAnimation.as

@@ -29,6 +29,7 @@
  *****************************************************************************/
 
 package spine.flash {
+	import flash.events.Event;
 	import spine.SkeletonData;
 	import spine.animation.AnimationState;
 	import spine.animation.AnimationStateData;
@@ -40,6 +41,12 @@ package spine.flash {
 			super(skeletonData);
 			state = new AnimationState(stateData ? stateData : new AnimationStateData(skeletonData));
 		}
+		
+		override protected function onRemove(e:Event):void{
+			state.clearListeners();
+			state.clearListenerNotifications();
+			super.onRemove(e);
+		}
 
 		override public function advanceTime(time : Number) : void {
 			state.update(time * timeScale);

+ 15 - 0
spine-as3/spine-as3/src/spine/flash/SkeletonSprite.as

@@ -60,6 +60,21 @@ package spine.flash {
 			_skeleton = new Skeleton(skeletonData);
 			_skeleton.updateWorldTransform();
 
+			addEventListener(Event.ADDED_TO_STAGE, onAdd);
+      		addEventListener(Event.REMOVED_FROM_STAGE, onRemove);
+		}
+		protected function onRemove(e:Event) : void {
+			removeEventListener(Event.ENTER_FRAME, enterFrame);
+		}
+		   
+		public function clearListeners() {
+			removeEventListener(Event.ADDED_TO_STAGE, onAdd);
+			removeEventListener(Event.REMOVED_FROM_STAGE, onRemove);
+		}
+
+		protected function onAdd(event:Event) : void {      
+      		lastTime = getTimer();
+			enterFrame(null);
 			addEventListener(Event.ENTER_FRAME, enterFrame);
 		}
 

BIN
spine-starling/spine-starling-example/lib/spine-as3.swc


BIN
spine-starling/spine-starling/lib/spine-as3.swc