Libgdx BitmapFont плохая частота кадров

1

У меня есть BitmapFont, чтобы отобразить счет игрока. Игрок движется с постоянной скоростью. Для BitmapFont я использую вторую OrtographicCamera и SpriteBatch, поэтому мне не нужно пересчитывать позицию шрифтов.

Моя проблема: как только я включаю BitmapFont, частота кадров падает, и вся игра становится лагги. Что я делаю не так?

public void render(float delta) {

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    rbg.render(delta);

    spriteBatch.setProjectionMatrix(cam.combined);
    spriteBatch.begin();    
        drawBlocks();
        drawBob();  
    spriteBatch.end();

    scoreBatch.setProjectionMatrix(scoreCam.combined);
    scoreBatch.begin();
        drawScore(this.score);
    scoreBatch.end();

    if (debug)
        drawDebug();
}

    private void drawBob() {
    bobFrame = bob.isFacingLeft() ? bobIdleLeft : bobIdleRight;
    if(bob.getState().equals(State.WALKING)) {
        bobFrame = bob.isFacingLeft() ? walkLeftAnimation.getKeyFrame(bob.getStateTime(), true) : walkRightAnimation.getKeyFrame(bob.getStateTime(), true);
    } else if (bob.getState().equals(State.JUMPING)) {
        if (bob.getVelocity().y > 0) {
            bobFrame = bob.isFacingLeft() ? bobJumpLeft : bobJumpRight;
        } else {
            bobFrame = bob.isFacingLeft() ? bobFallLeft : bobFallRight;
        }
    }
    spriteBatch.draw(bobFrame, bob.getPosition().x * ppuX, bob.getPosition().y * ppuY, Bob.WIDTH * ppuX, Bob.HEIGHT * ppuY);

    cam.position.set(cam.position.x + 24f, Gdx.graphics.getHeight() / 2f, 0);
    cam.update(); } 
private void drawBlocks() {
    for (Block block : world.getDrawableBlocks((int)CAMERA_WIDTH, (int)CAMERA_HEIGHT)) {
        spriteBatch.draw(blockTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY);
    }
    for (Block block : world.getBottomBlocks((int)CAMERA_WIDTH, (int)CAMERA_HEIGHT)) {
        spriteBatch.draw(blockBottomTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY);
    }
    for (Block block : world.getTopBlocks((int)CAMERA_WIDTH, (int)CAMERA_HEIGHT)) {
        spriteBatch.draw(blockTopTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY);
    }
}
public void drawScore(String score) {
    BitmapFont bf = new BitmapFont(Gdx.files.internal("data/droidserif.fnt"), Gdx.files.internal("data/droidserif.png"),false);
    bf.setUseIntegerPositions(false);
    bf.setScale(2);
    bf.draw(scoreBatch, this.score, 20,50); 
}
Теги:
libgdx
frame-rate
bitmap-fonts

1 ответ

0
Лучший ответ

Вы создаете шрифт для каждого кадра, и поэтому он медленный:

BitmapFont bf = new BitmapFont(Gdx.files.internal("data/droidserif.fnt"), Gdx.files.internal("data/droidserif.png"),false);

==> создать поле в вашем классе игры BitmapFont bf и инициализировать его в вашем методе create + удалить создание шрифта из метода drawScore

  • 1
    Большое спасибо. Работало отлично !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню