首页 文章

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

提问于
浏览
0

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

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 回答

  • 2

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

    boolean alive = true;
    

    然后你的所有绘图都会发生,并且如果你的动画完成,那么你将所有你设置为false的所有东西:

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

    ==>这太晚了,因为在此之后你不再对这个局部变量做任何事了 .


    例如,您可以检查“alive”在开头是否应为true或false,并相应地设置其值,例如:

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

    或者你可以使“活着”字段而不是局部变量 .

相关问题