Подтвердить что ты не робот

Как нарисовать BitmapFont в LibGDX?

Я серьезно полагаю, что я сделал что-то плохое, и просто не могу его заметить.

package com.me.mygdxgame;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

public class Locked implements ApplicationListener
{
    private OrthographicCamera camera;
    private SpriteBatch batch;
    private Texture texture;
    private Sprite sprite;
    private BitmapFont font;
    private CharSequence str = "Hello World!";
    private float width;
    private float height;

    @Override
    public void create()
    {
        width = Gdx.graphics.getWidth();
        height = Gdx.graphics.getHeight();

        camera = new OrthographicCamera(1, height / width);
        batch = new SpriteBatch();

        texture = new Texture(Gdx.files.internal("data/libgdx.png"));
        texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

        TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);

        sprite = new Sprite(region);
        sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());
        sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
        sprite.setPosition(-sprite.getWidth() / 2, -sprite.getHeight() / 2);

        font = new BitmapFont(Gdx.files.internal("data/digib.fnt"),
                Gdx.files.internal("data/digib.png"), false);
    }

    @Override
    public void dispose()
    {
        batch.dispose();
        texture.dispose();
    }

    @Override
    public void render()
    {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        font.setColor(0.0f, 0.0f, 0.0f, 1.0f);

        //sprite.draw(batch);
        font.draw(batch, str, width*0.5f, height*0.5f);
        batch.end();
    }

    @Override
    public void resize(int width, int height)
    {
    }

    @Override
    public void pause()
    {
    }

    @Override
    public void resume()
    {
    }
}

Проект был создан с помощью инструмента шаблона, который они предоставляют gdx-setup-ui.jar Как вы можете видеть в коде, я не удосужился избавиться от кодов по умолчанию (просто некоторые простые коды для рендеринга логотипа LibGDX).

Итак, с чисто созданным проектом я следил за этим руководством здесь http://code.google.com/p/libgdx-users/wiki/addingText2D

и, наконец, с предоставленным кодом выше.

Проблема в том, почему не будет отображаться текст! @# $ing!? Я так много раз менял положение и до сих пор не повезло:\

Я что-то пропустил?

FYI: Шрифты в порядке, я бросил их в другую игру и работает.

4b9b3361

Ответ 1

Попробуйте изменить матрицу проекций следующим образом:

Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight());

batch.setProjectionMatrix(normalProjection);

Ответ 2

Все, что я делаю, это

    spriteBatch = new SpriteBatch();
 font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"),
         Gdx.files.internal("data/nameOfFont.png"), false);

и в методе рендеринга

spriteBatch.begin();
 font.setColor(1.0f, 1.0f, 1.0f, 1.0f);
 font.draw(spriteBatch, "some string", 25, 160);
 spriteBatch.end();

Вы можете прочитать что-то еще об этом в моем блоге: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

Ответ 3

Лично я не большой поклонник преобразования всех шрифтов в формат .fnt. Если вам нужны разные размеры для определенного шрифта, вы должны потратить много времени (и пространство приложения), чтобы сделать все преобразования.

Вы можете просто использовать расширение FreeType и загрузить прямо из .ttf

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();

Подробнее здесь

Рендеринг выполняется так же, как объясняется watis.

Ответ 4

создать файл .fnt с использованием hiero, который предоставляется веб-сайтом libgdx

установите размер шрифта 150, он создаст файл .fnt и файл png

скопируйте оба файла в папку ваших папок

теперь объявить шрифт

BitmapFont font;

nw в методе создания

font = new BitmapFont (Gdx.files.internal( "data/100.fnt" ), false);//100 - это имя шрифта, которое вы можете присвоить своему шрифту любым именем

в рендеринге

font.setscale(.2f);

font.draw(пакетный, "все, что вы хотите записать", x, y);

это будет работать гладко

Ответ 5

Основная проблема с вашим кодом заключается в том, что вы создали камеру с
viewportWidth = 1 &
viewportHeight = ширина/высота

и вы рисуете шрифт шириной * 0.5f и высотой * 0.5f, который выходит за рамки с камеры

Либо измените инициализацию камеры на

camera = new OrthographicCamera(width, height);

.... или измените оператор draw draw на

font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);

Ответ 6

Вы пытались дать позицию вручную, как это. Я надеюсь, что это сработает       batch.setProjectionMatrix(camera.combined);       batch.enableBlending();       batch.begin();
      font.draw(пакет, yourString, 100,100);
      batch.end();