2012-09-17 18 views
26

Libgdx ile basit 2B metin çizme konusunda çok fazla sorun yaşıyorum.Libgdx/Java kullanarak nasıl metin çizebilirim?

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

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

Merhaba Dünya dize çizmek güvenlik kodu, ancak bütün diğer çizimleri haberci yukarıya: Ben bugüne kadar bir araya getirdik koddur. Oradalar, sadece vahşice parçalanmışlar, harekete geçiyorlar ve tüm bunlar. Hemen her ifade alt kümesi hakkında Gdx.gl11.glPushMatrix() ve Gdx.gl11.glPopMatrix() denedim.

Parçalanmış resimleri font.draw() numaralı aramaya daraltdım, eğer bu işe yararsa, her şey iyi çalışıyor (ama tabiki metin yok). (Bir font indirirken olmadığını kontrol edin .FNT dosyası ve .png dosyası aynı dahildir) bazı yazı dosyasını indirerek bu deneyin

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

: Ben böyleydi Bitmap yazı tipi yarattı

cevap

12

+0

@Asgeir Yardımcı bulduysanız cevabı kabul etmeyi unutmayın – alex

+4

Fark etmez. ´new BitmapFont() ´ ile örneklemek varsayılan katıştırılmış yazı tipini kullanacaktır. –

+1

Ve BitmapFont tek başına oluşturmuyor. BitmapFont, metni nasıl oluşturduğunun yapılandırmasıdır. Parti, BitmapFont ve bir String (çizilecek metin) kullanarak metni çizer – Zoe

2

deneyin birden batch.begin() ve batch.end() çağırmak için:

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(); 

ya da sadece SpriteBatch

farklı bir örneğini kullanmak
+0

Bu işe yaramıyor. –

2

Bir .fnt dosyası oluşturmak için LibGDX'in web sitesi tarafından sağlanan hiero'yu kullanın.

Yazı tipi boyutunun 150 olarak ayarlanması, bir .fnt dosyası ve bir .png dosyası oluşturur. Her iki dosyayı da varlıklar klasörünüze kopyalayın.

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

kılmak için (In yöntemini oluşturmak):

BitmapFont font; 

yazı yüklemek için:

yazı bildirmek için

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

Bu sorunsuz çalışacaktır.

+0

SetScale'yi kastetmiyor musunuz? – Cilan

19

Metin çizimi için ayrı toplu iş oluşturma nedenleri çok fazla değil. Kullanılması gdxVersion = '1.4.1' (Android Studio'da gradle ile inşa edilmiş) bu kod başarıyla metni çizer:

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(); 
    } 

Not kullanıcıları, işte karakter hamle olmazsa dünyanın için, Platformer (koordinatları, böylece oyun çizmek olduğunu örnek), metin de taşınacaktır. Metni görmek istiyorsanız, ekrana, Label/TextField gibi bir şeye veya farklı UI çerçevelerinde nasıl çağrılacağına karar verirseniz, Sahne Alanı'nı (ve metin için TextArea'yı) kullanmanızı tavsiye ederim, örneğin nasıl kullanılacağına bakın. Sahne Alanı: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

İlgili konular