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
\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
\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
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