如何停止在libgdx中绘制SpriteBatch动画?

时间:2014-04-15 15:35:38

标签: android animation libgdx

嗨我在Libgdx中有一个spritebatch动画。它只播放一次,当它完成时我想停止绘制它,因此它不会出现在屏幕上。我有一个布尔值,检查它是否仍然活着,即动画,当动画完成后使用isAnimationFinished设置为false但它保留在屏幕上,我不知道为什么即使日志打印显示它在完成时变为false 。有谁知道为什么会这样?谢谢你的帮助。以下代码来自我的渲染方法。

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
     boolean alive = true;
     stateTime += Gdx.graphics.getDeltaTime();           // #15
        currentFrame = walkAnimation.getKeyFrame(stateTime, false);  // #16
        spriteBatch.begin();
        spriteBatch.draw(menu, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        if (alive)
        spriteBatch.draw(currentFrame,50,50);
        if(walkAnimation.isAnimationFinished(stateTime))
        alive = false;
        System.out.println(alive);
        spriteBatch.end();
        stage.draw();

1 个答案:

答案 0 :(得分:2)

我看到的问题是你总是声明一个新的布尔变量" alive"并在开头将alive设置为true:

boolean alive = true;

然后你的所有绘图都发生了, 之后如果你的动画完成,你将所有你的活动设置为false:

if(walkAnimation.isAnimationFinished(stateTime))
    alive = false;

==>现在为时已晚,因为在此之后,您不再使用此本地变量执行任何操作。


例如,您可以检查" alive"在开头应该是真或假,并相应地设置其值,例如:

 boolean alive = true;
 if(walkAnimation.isAnimationFinished(stateTime)) {
    alive = false;
 }
 //your drawing code below..

或者你可以让#34;活着"字段而不是局部变量。