2012-09-17 13 views
26

Mam duże problemy z Google, jak narysować prosty tekst 2D za pomocą Libgdx. Oto kod, który już ułożyła tej pory:Jak mogę narysować tekst za pomocą Libgdx/Java?

SpriteBatch spriteBatch; 
BitmapFont font; 
CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 

Kod ma zwrócić ciąg Hello World, jednak bałagan wszystkie inne moje rysunki. Są tam, brutalnie okaleczone, poruszają się i to wszystko. Próbowałem już Gdx.gl11.glPushMatrix() i Gdx.gl11.glPopMatrix() wokół niemal każdego podzestawu instrukcji.

Zawęziłem okaleczone rysunki do wywołania font.draw(), jeśli zostało to zrobione, wszystko działa poprawnie (ale oczywiście nie ma wtedy tekstu).

Odpowiedz

12

Kiedy stworzył czcionki Bitmap to było tak:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false); 

spróbować pobierając jakiś plik czcionki (podczas pobierania czcionek proszę sprawdzić czy .FNT plik i .png plik znajduje się na tym samym)

+0

@Asgeir nie zapomnij przyjąć odpowiedzi, jeśli uznasz ją za przydatną – alex

+4

Nie ma to znaczenia. Zainstalowanie go za pomocą'new BitmapFont() 'użyje domyślnej czcionki osadzonej. –

+1

Sam BitmapFont nie renderuje. BitmapFont to konfiguracja sposobu renderowania tekstu. Partia rysuje tekst za pomocą BitmapFont i String (tekst do narysowania) – Zoe

2

Spróbuj zadzwonić wielokrotnego batch.begin() i batch.end():

CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 
spriteBatch.begin(); 
//draw your other sprites here 
spriteBatch.draw(...); 
spriteBatch.end(); 

lub po prostu użyć innego wystąpienie SpriteBatch

+0

To nie działa. –

2

Aby utworzyć plik .fnt, użyj hiero, który jest dostarczany przez stronę LibGDX.

Ustaw rozmiar czcionki 150, utworzy plik .fnt i plik .png. Skopiuj oba pliki w folderze zasobów.

Aby wykazać czcionkami

BitmapFont font; 

Aby załadować czcionkami (w sposób tworzyć)

font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false); 
//rayanfont is the font name 

Renderowanie:

batch.begin(); 
font.setScale(.2f); 
font.draw(batch, "hello", x,y); 
batch.end(); 

to będzie działać płynnie.

+0

Nie masz na myśli "setScale"? – Cilan

19

Nie widzę powodu, by tworzyć oddzielną partię do rysowania tekstu. Korzystanie gdxVersion = „1.4.1” (zbudowany z Gradle w Android Studio), że kod rysuje tekst powodzeniem:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font 

public void render(float dt) 
    { 
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI 

    batch.begin(); 

    //draw background, objects, etc. 
    for(View view: views) 
    { 
     view.draw(batch, dt); 
    } 

    font.draw(batch, "Hello World!", 10, 10); 

    batch.end(); 
    } 

Zauważ, że tutaj można narysować w grę współrzędne świata, więc jeśli twoje ruchy postaci (w platformówki, dla przykład), niż tekst też się poruszy. Jeśli chcesz zobaczyć tekst, który zostanie naprawiony na ekranie, coś jak Label/TextField lub jak jest wywoływany w różnych frameworkach UI, niż polecam użyć Stage (i TextArea dla tekstu), zobacz na przykład, jak używać Etap tutaj: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

Powiązane problemy