无法循环操作。 libGDX

我问了4天前的一个问题。 得到了一些帮助,现在我的代码看起来像

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(); } 

但它仍然有效。 它会动作一次并停止。 当我需要循环时。 从蓝色到金色,然后是从金色到蓝色。 我真的很感激任何帮助,因为我只是在学习libGDX。 谢谢。

我已经阅读了所有答案并编辑了我的代码,但它仍然无效:

 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); } 

这是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(); } 

现在它不会改变颜色,它总是蓝色的。

您遇到了与期望与Actors一起使用的Actions相关的错误。 很多Actions在没有Actor的情况下工作正常,但是SequenceAction没有,因为它希望附加到Actor以检测它是否仍然应该运行。

所以一个有点hacky的解决方案是在你设置它时为你的顶级动作添加一个虚拟actor。 这模拟了当您向舞台中的actor添加动作时发生的情况。

 repeatAction.setActor(new Actor()); 

如果您计划在应用中使用更多操作,则可以创建一个用于管理所有操作的Actor:

 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()); 

当然,如果你想使用舞台绘制东西,你可以简单地将你的动作添加到舞台而不是使用Actor作为你的动作管理器。

我个人觉得scene2d动作必须比UniversalTweenEngine更容易使用和设置。

Libgdx动作仅适用于Libgdx演员。 您正在创建一个动作但不将其分配给Actor。 您只需将shapeRenderer颜色设置为蓝色,而忽略您创建的操作。 如果要随时间更改颜色,我建议使用Universal tween引擎中的补间 。

或者,您可以抛弃shapeRenderer并使用Image(Actor的子类)。 然后,您将操作分配给图像。 但要做到这一点,你必须创建一个舞台并将你的影像添加到舞台上。 查看scene2d wiki 。

无论哪种方式都将是一些额外的步骤。 也许一个廉价的黑客让这个很容易工作将是:

  1. 只需创建一个图像:

    Image i = new Image();

  2. 将您的动作分配给图像i

    i.addAction(repeatAction);

  3. 用。替换repeatAction.act(…)

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

  4. 将shapeRenderer.setColor(蓝色)更改为

    shapeRenderer.setColor(i.getColor());

希望有所帮助。

所以以下示例为我工作(无限旋转)

方法1 :(推荐)

 loadingActor.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(360, 1))); 

方法2:

 Image 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));