2012-10-15 23 views
12

Tôi nghiêm túc cá cược rằng tôi đã làm một điều gì đó thật ngu ngốc và dường như không thể nhận ra điều đó.Làm thế nào để vẽ một BitmapFont trong 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() 
    { 
    } 
} 

Dự án đã được tạo ra với các mẫu công cụ mà họ cung cấp GDX-setup-ui.jar Như bạn có thể thấy trong các mã, tôi không bận tâm để thoát khỏi các mã mặc định (Chỉ cần một số các mã vẽ đơn giản để hiển thị biểu trưng LibGDX).

Như vậy, với các dự án sạch tạo ra, tôi theo hướng dẫn này đây http://code.google.com/p/libgdx-users/wiki/addingText2D

và cuối cùng đến với các mã được cung cấp ở trên.

Vấn đề là, tại sao không hiển thị văn bản @ # $ ing !? Tôi đã thay đổi vị trí nhiều lần và vẫn không có may mắn: \

Tôi đã bỏ lỡ điều gì đó?

FYI: Phông chữ tốt, tôi thả chúng vào một trò chơi khác và hoạt động.

Trả lời

8

Cố gắng thay đổi ma trận chiếu như thế này:

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

batch.setProjectionMatrix(normalProjection); 
7

Tất cả tôi làm là

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

và Phương thức render

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

Bạn có thể đọc một cái gì đó thêm về nó trên của tôi blog: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

1

Bạn đã thử đưa vị trí theo cách thủ công như thế này chưa. Tôi hy vọng điều này sẽ hoạt động batch.setProjectionMatrix (camera.combined); batch.enableBlending(); batch.begin();
font.draw (batch, yourString, 100,100);
batch.end();

2

Vấn đề chính với mã của bạn là bạn đã tạo ra máy ảnh với
viewportWidth = 1 &
viewportHeight = chiều rộng/chiều cao

và bạn đang vẽ phông chữ ở chiều rộng * 0.5f & chiều cao * 0.5f mà được ra khỏi phạm vi từ máy ảnh

Hoặc thay đổi khởi camera để

camera = new OrthographicCamera(width, height); 

.... hoặc thay đổi tuyên bố phông chữ bốc thăm để

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

tạo một file .fnt sử dụng hiero được cung cấp bởi trang web libgdx

thiết lập kích thước của phông chữ 150, nó sẽ tạo ra một.tập tin phổ biến bao gồm một file png

sao chép cả hai tập tin trong thư mục Tài sản của bạn

nay tuyên bố font

BitmapFont phông chữ;

nw trong tạo phương pháp

phông chữ = new BitmapFont (Gdx.files.internal ("data/100.fnt"), false); // 100 là tên font bạn có thể cung cấp cho phông chữ của bạn bất kỳ tên

để hiển thị

font.setscale (.2f);

font.draw (batch, "bất cứ điều gì bạn muốn viết", x, y);

điều này sẽ hoạt động trơn tru

5

Cá nhân tôi không phải là người hâm mộ lớn chuyển đổi tất cả phông chữ thành định dạng .fnt. Nếu bạn cần kích thước khác nhau cho một phông chữ nhất định, bạn phải dành nhiều thời gian (và không gian ứng dụng) để thực hiện tất cả các chuyển đổi.

Bạn chỉ có thể sử dụng mở rộng FreeType và tải trực tiếp từ một .ttf

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

Thông tin thêm here

Rendering được thực hiện trong cùng một cách như được giải thích bởi watis.

+0

Tôi không thể sử dụng generator.generateFont (int); bởi vì nó không tồn tại. Bạn chỉ có thể vượt qua trong một FreeTypeFontParameter – Eames

+0

Có một hướng dẫn về cách sử dụng FreeTypeFontGenerator tại đây> https://libgdx.info/basic-label/ – Julien