【问题标题】:How to stop drawing a SpriteBatch animation in libgdx?如何停止在 libgdx 中绘制 SpriteBatch 动画?
【发布时间】:2014-04-15 15:35:38
【问题描述】:

您好,我在 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();

【问题讨论】:

    标签: android animation libgdx


    【解决方案1】:

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

    boolean alive = true;
    

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

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

    ==> 为时已晚,因为在此之后您不再对这个 local 变量做任何事情。


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

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

    或者,您可以将“活动”设置为字段而不是局部变量。

    【讨论】:

    • 非常感谢您指出这一点。这是我犯的一个愚蠢的错误。我将布尔变量设为全局变量,现在它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2012-10-03
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多