LibGDX - 渲染愤怒的小鸟风格动画分数计数器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LibGDX - 渲染愤怒的小鸟风格动画分数计数器相关的知识,希望对你有一定的参考价值。

我的游戏有一个关卡水平的结束,我希望在其上显示一个动画玩家得分。如果您在“愤怒的小鸟”和许多其他游戏中看过一个,则乐谱文本从“000000”开始并快速递增,直到达到玩家所达到的实际分数。我试图用while循环和for循环编写它,但它只是不能正常工作 - 我很明显仍然误解了更新方法的工作原理。这是我的End of Level屏幕的render()方法:

@Override
public void render (float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    timeElapsed = delta;
    while(this.iCounter < this.score) {

        font.draw(batch, "Score: " + this.iCounter, screenWidth / 2, screenHeight / 2);
        if(timeElapsed > 1.0f) {
            iCounter = iCounter + 10;
        }
        timeElapsed = 0.0f;
    }

    batch.end();
}

上面似乎只是崩溃了屏幕。

我只想让分数从零开始,然后每半秒一次,例如增加分数,直到达到实际分数。

有没有人对如何正确地做到这一点有任何想法,因为我似乎无法让这个工作。

答案

你在渲染中多次调用font.draw()。结果将是多个分数,在其他分数上绘制。请注意,render每帧调用一次,并且您希望在n帧上设置得分动画。

所以你的变量iCounter应该是一个类变量,你在render方法中增加并绘制一次。你可能还想存储一个恒定的scorePerSecond,它定义了iCounter每秒递增多少。 所以结果应该是这样的:

public static final int SCORE_PER_SECOND = 100;
private int iCounter;
public void render (float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    iCounter = Math.min((int)(iCounter+SCORE_PER_SECOND*delta), score)
    font.draw(batch, "Score: " + this.iCounter, screenWidth / 2, screenHeight / 2);
    batch.end();
}
另一答案

每帧都会调用render方法,并且放在那里的所有绘图应该只用于单个帧。它正在做的是尝试在一个帧中运行你的整个外观,因此看起来它已经崩溃了。

你需要做的是摆脱循环,只需每帧向iCounter添加一个数量(即每次调用render())。

这是你的编码编辑成一个非常简单的实现,以显示我的意思...

@Override
public void render (float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "Score: " + this.iCounter, screenWidth / 2, screenHeight / 2);
    if (this.iCounter < this.score) {
        this.iCounter++;
    }
    batch.end();
}

这将增加每一帧的得分,我认为这可能是你想要的。 Eitehr的方式应该提供一个很好的起点。

另一答案

感谢上面帮助过我的每个人。这就是我最终实现它的方式。

    time += delta;
    if (time >= this.SCORE_DELAY) {
        if (iCounter < this.score) {
            iCounter = iCounter + 10;
        }
        time -= this.SCORE_DELAY;
    }

SCORE_DELAY被声明为浮点数,我的设置为0.15f,这似乎是一个很好的利率。

    private static float SCORE_DELAY = 0.15f;

以上是关于LibGDX - 渲染愤怒的小鸟风格动画分数计数器的主要内容,如果未能解决你的问题,请参考以下文章

如何在Flash中制作愤怒的小鸟评分类型“三颗星评级”?

U3D小游戏愤怒的小鸟游戏暂停

U3D小游戏愤怒的小鸟游戏暂停

U3D小游戏愤怒的小鸟游戏暂停

愤怒小鸟

蓝桥-愤怒的小鸟