OSDN Git Service

[fixed] delay didn't fire the finished method of the wrapped Action.
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 9 Feb 2011 13:39:53 +0000 (13:39 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 9 Feb 2011 13:39:53 +0000 (13:39 +0000)
gdx/src/com/badlogic/gdx/scenes/scene2d/actions/Delay.java
tests/gdx-tests/src/com/badlogic/gdx/tests/ActionTest.java

index 93a0698..ad8a24c 100644 (file)
@@ -27,12 +27,14 @@ public class Delay extends Action {
        protected float taken;\r
        protected float duration;\r
        protected Action action;\r
+       protected boolean listenerFired = false;\r
 \r
        public static Delay $ (Action action, float duration) {\r
                Delay delay = pool.obtain();\r
                delay.duration = duration;\r
                delay.action = action;\r
                delay.listener = null;\r
+               delay.listenerFired = false;\r
                return delay;\r
        }\r
 \r
@@ -43,7 +45,13 @@ public class Delay extends Action {
 \r
        @Override public void act (float delta) {\r
                taken += delta;\r
-               if (taken > duration) action.act(delta);\r
+               if (taken > duration) {\r
+                       if(!listenerFired && listener != null) {\r
+                               listener.completed(this);                               \r
+                               listenerFired = true;\r
+                       }\r
+                       action.act(delta);\r
+               }\r
        }\r
 \r
        @Override public boolean isDone () {\r
@@ -52,8 +60,7 @@ public class Delay extends Action {
 \r
        @Override public void finish () {\r
                pool.free(this);\r
-               if(listener != null)\r
-                       listener.completed(this);\r
+               action.finish();                \r
        }\r
 \r
        @Override public Action copy () {\r
index b5c7c58..9eacc45 100644 (file)
@@ -4,37 +4,71 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.GL10;\r
 import com.badlogic.gdx.graphics.Texture;\r
 import com.badlogic.gdx.graphics.Texture.TextureFilter;\r
+import com.badlogic.gdx.scenes.scene2d.Action;\r
+import com.badlogic.gdx.scenes.scene2d.OnActionCompleted;\r
 import com.badlogic.gdx.scenes.scene2d.Stage;\r
-import com.badlogic.gdx.scenes.scene2d.actions.Forever;\r
-import com.badlogic.gdx.scenes.scene2d.actions.Parallel;\r
-import com.badlogic.gdx.scenes.scene2d.actions.RotateTo;\r
+import com.badlogic.gdx.scenes.scene2d.actions.Delay;\r
+import com.badlogic.gdx.scenes.scene2d.actions.MoveBy;\r
 import com.badlogic.gdx.scenes.scene2d.actors.Image;\r
 import com.badlogic.gdx.tests.utils.GdxTest;\r
 \r
-public class ActionTest extends GdxTest {\r
+public class ActionTest extends GdxTest implements OnActionCompleted {\r
 \r
-       @Override public boolean needsGL20 () {\r
+       @Override\r
+       public boolean needsGL20() {\r
                return false;\r
        }\r
 \r
        Stage stage;\r
-       \r
-       @Override public void create() {\r
+\r
+       @Override\r
+       public void create() {\r
                stage = new Stage(480, 320, true);\r
-               Texture texture = new Texture(Gdx.files.internal("data/badlogic.jpg"), false);\r
-               texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);                                                                                                                          \r
+               Texture texture = new Texture(Gdx.files.internal("data/badlogic.jpg"),\r
+                               false);\r
+               texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);\r
                Image img = new Image("actor", texture);\r
                img.width = img.height = 100;\r
+               img.originX = 50;\r
+               img.originY = 50;\r
                img.x = img.y = 100;\r
-//             img.action(Forever.$(Sequence.$(ScaleTo.$(1.1f, 1.1f,0.3f),ScaleTo.$(1f, 1f, 0.3f))));\r
-               img.action(Forever.$(Parallel.$(RotateTo.$(1, 1))));\r
-               \r
+               // img.action(Forever.$(Sequence.$(ScaleTo.$(1.1f,\r
+               // 1.1f,0.3f),ScaleTo.$(1f, 1f, 0.3f))));\r
+               // img.action(Forever.$(Parallel.$(RotateTo.$(1, 1))));\r
+               // img.action(Delay.$(RotateBy.$(45, 2),\r
+               // 1).setCompletionListener(this));\r
+               Action actionMoveBy = MoveBy.$(30, 0, 0.5f).setCompletionListener(\r
+                               new OnActionCompleted() {\r
+\r
+                                       @Override\r
+                                       public void completed(Action action) {\r
+                                               System.out.println("move by complete");\r
+                                       }\r
+                               });\r
+\r
+               Action actionDelay = Delay.$(actionMoveBy, 1).setCompletionListener(\r
+                               new OnActionCompleted() {\r
+\r
+                                       @Override\r
+                                       public void completed(Action action) {\r
+                                               System.out.println("delay complete");\r
+                                       }\r
+                               });\r
+\r
+               img.action(actionDelay);\r
+\r
                stage.addActor(img);\r
        }\r
-       \r
-       @Override public void render() {\r
+\r
+       @Override\r
+       public void render() {\r
                Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r
                stage.act(Gdx.graphics.getDeltaTime());\r
                stage.render();\r
        }\r
+\r
+       @Override\r
+       public void completed(Action action) {\r
+               System.out.println("completed");\r
+       }\r
 }\r