Ответ 1
Попробуйте изменить матрицу проекций следующим образом:
Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setProjectionMatrix(normalProjection);
Я серьезно полагаю, что я сделал что-то плохое, и просто не могу его заметить.
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: Шрифты в порядке, я бросил их в другую игру и работает.
Попробуйте изменить матрицу проекций следующим образом:
Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setProjectionMatrix(normalProjection);
Все, что я делаю, это
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/
Лично я не большой поклонник преобразования всех шрифтов в формат .fnt. Если вам нужны разные размеры для определенного шрифта, вы должны потратить много времени (и пространство приложения), чтобы сделать все преобразования.
Вы можете просто использовать расширение FreeType и загрузить прямо из .ttf
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();
Подробнее здесь
Рендеринг выполняется так же, как объясняется watis.
создать файл .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);
это будет работать гладко
Основная проблема с вашим кодом заключается в том, что вы создали камеру с
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);
Вы пытались дать позицию вручную, как это. Я надеюсь, что это сработает batch.setProjectionMatrix(camera.combined); batch.enableBlending(); batch.begin();
font.draw(пакет, yourString, 100,100);
batch.end();