java android libgdx scene2d

java - No se puede repetir una acción. libGDX



android scene2d (3)

He hecho una pregunta como hace 4 días. Tengo algo de ayuda y ahora mi código parece

ColorAction actionBtG = new ColorAction(); ColorAction actionGtB = new ColorAction(); SequenceAction sequenceAction; RepeatAction repeatAction = new RepeatAction(); ShapeRenderer shapeRenderer; Color blue = new Color(Color.BLUE); @Override public void create () { shapeRenderer = new ShapeRenderer(); actionBtG.setColor(blue); actionBtG.setEndColor(Color.GOLD); actionBtG.setDuration(5); actionGtB.setColor(blue); actionGtB.setEndColor(Color.BLUE); actionGtB.setDuration(5); sequenceAction = new sequenceAction(actionBtG,actionGtB); repeatAction = new RepeatAction(): repeatAction.setAction(sequenceAction); repeatAction.setCount(RepeatAction.FOREVER); } @Override public void render () { repeatAction.act(Gdx.graphics.getDeltaTime()); Gdx.gl.glClearColor(1,1,1,1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); shapeRenderer.setColor(blue); shapeRenderer.rect(100, 100, 40, 40); shapeRenderer.end(); }

Pero todavía funciona mal. Hace acción una vez y se detiene. Cuando necesito bucle eso. De azul a dorado, luego de dorado a azul. Realmente agradecería cualquier ayuda, porque estoy aprendiendo libGDX. Gracias.

He leído todas las respuestas y editado mi código, pero todavía no funciona:

private Actor actionManager = new Actor(); ColorAction actionBtG = new ColorAction(); ColorAction actionGtB = new ColorAction(); SequenceAction sequenceAction; RepeatAction repeatAction; Color activeColor = new Color(Color.BLUE); ShapeRenderer shapeRenderer; @Override public void create () { shapeRenderer = new ShapeRenderer(); actionBtG.setColor(activeColor); actionBtG.setEndColor(Color.GOLD); actionBtG.setDuration(5); actionGtB.setColor(activeColor); actionGtB.setEndColor(Color.BLUE); actionGtB.setDuration(5); sequenceAction = new SequenceAction(actionBtG,actionGtB); repeatAction = new RepeatAction(); repeatAction.setAction(sequenceAction); repeatAction.setCount(RepeatAction.FOREVER); actionManager.addAction(repeatAction); }

Aquí está el render ()

@Override public void render () { Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); actionManager.act(Gdx.graphics.getDeltaTime()); shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); shapeRenderer.setColor(blue); shapeRenderer.rect(100, 100, 40, 40); shapeRenderer.end(); }

Ahora no está cambiando el color, siempre es azul.


Está encontrando un error relacionado con Acciones que espera ser utilizado con Actores. Muchas Acciones funcionan bien sin un Actor, pero SequenceAction no lo hace porque espera estar conectado a un Actor para detectar si todavía se está ejecutando.

Por lo tanto, una solución un tanto hacky sería agregar un actor ficticio a su acción de nivel superior cuando lo configure. Esto simula lo que sucede cuando agregas una acción a un actor en una etapa.

repeatAction.setActor(new Actor());

Si planea usar más Acciones en su aplicación, puede crear un Actor único que use para administrar todas sus acciones:

private Actor actionManager = new Actor(); //when creating actions: actionManager.addAction(repeatAction); //In render(), use this instead of calling act on individual actions //It will call act on all actions in the actor: actionManager.act(Gdx.graphics.getDeltaTime());

Y, por supuesto, si desea usar un escenario para dibujar cosas, simplemente puede agregar sus acciones al escenario en lugar de usar un actor como su administrador de acciones.

Personalmente, encuentro que las acciones de scene2d deben ser más fáciles de usar y configurar que UniversalTweenEngine.


Las acciones de Libgdx son solo para los actores de Libgdx. Estás creando una acción pero no asignándola a un Actor. Solo está configurando el color shapeRenderer en azul, sin tener en cuenta la acción que ha creado. Yo recomendaría usar una interpolación de Universal Tween Engine si desea cambiar el color con el tiempo.

Alternativamente, podría deshacerse del shapeRenderer y usar una Imagen (subclase de Actor). Luego asignarías tu acción a la Imagen. Pero para hacer eso, tendrías que crear un escenario y agregar tu Imagen al escenario. Mira la wiki de scene2d .

De cualquier manera va a haber algunos pasos adicionales. Tal vez un truco barato para hacer que esto funcione fácilmente sería:

  1. solo crea una imagen:

    Imagen i = nueva Imagen ();

  2. asigna tu acción a la imagen i

    i.addAction (repeatAction);

  3. reemplace repeatAction.act (...) con

    i.act (Gdx.graphics.getDeltaTime ());

  4. cambie shapeRenderer.setColor (azul) a

    shapeRenderer.setColor (i.getColor ());

Espero que ayude.


La siguiente muestra funcionó para mí (rotación infinita para imagen)

Imagen final loadingActor = new Image (AssetsController.getInstance (). getLoading ()); loadingActor.setOrigin (Align.center);

final SequenceAction infiniteRotate = Actions.sequence(); infiniteRotate.addAction(Actions.rotateTo(0 , 0f) ); infiniteRotate.addAction(Actions.rotateTo(360 , 1f) ); loadingActor.addAction(Actions.forever(infiniteRotate));