2013-01-11 17 views
15

Tek bir tuş üzerinde metni ortalamanın bir yolunu bulmaya çalışıyorum, ancak kolay ve çok amaçlı bir yol bulamıyor. Bunu yapabilirim, ancak herhangi bir dizgi için değil, sadece belirli bir dizgede çalışacaktır. Bir düğmedeki herhangi bir dizeyi ortalamanın bir yolu olup olmadığını bilmek istiyorum. Bu durumda düğmem 185x50.Libgdx: Bir düğmeye her bir eksende metin yerleştirmenin kolay bir yolu var mı?

Öyle gibi ekranda bu düğmeye ortalamak mümkün olmuştur:

buttonX = WIDTH/2 - (screen.getRegionWidth()/2); 
buttonY = HEIGHT/2 - (screen.getRegionHeight()/2); 

Herhangi bir yardım çok takdir edilecektir. :)

+0

LibGDX Stage UI "düğmesini" kullanıyor musunuz? Veya kendi düğme sınıfınız? (- font.getBounds (fontText) .width gameWidth)/2 ' –

cevap

48

sürümü 1.7.1-SNAPSHOT libgdx cevabını Güncelleme: Bunu yapmak için

kolay yolu, libgdx gelen TextButton sınıfını kullanmaktır. TextButton'daki metin varsayılan olarak ortalanır. Bu hala çalışıyor!

Güncelleme örnek:

Eski örnek:

Bu artık çalışmıyor

!

Bunu kullanmak istemiyorsanız, sizinle yazı genişliğini ve yüksekliğini alabilirsiniz: yeni versiyonu için

String fontText = ""; 
    fontX = buttonX + buttonWidth/2 - font.getBounds(fontText).width/2; 
    fontY = buttonY + buttonHeight/2 + font.getBounds(fontText).height/2; 
+2

, kolayca sadece oyunun genişliği metnin genişliğini çıkararak ve 2. 'fontX = bölerek ortalayabilmek değiştirdiler çünkü bu amaçla api –

+0

Bence Sadece bu cevaba eklemek için –

+0

@AlexKapustian'da bulamıyorum (libgdx'in daha yeni sürümünde). – bytestorm

10

: Yani böyle bir şey yapabileceği

font.getBounds("Test text"); 

libgdx BitMapFont.getBounds() işlevi artık api'de yok. Sınırları almak için GlyphLayout'ı kullanabilirsiniz.Örneğin,

BitmapFont font; 
SpriteBatch spriteBatch; 
//... Load any font of your choice first 
FreeTypeFontGenerator fontGenerator = new FreeTypeFontGenerator(
    Gdx.files.internal("myFont.ttf") 
); 
FreeTypeFontGenerator.FreeTypeFontParameter freeTypeFontParameter = 
     new FreeTypeFontGenerator.FreeTypeFontParameter(); 
freeTypeFontParameter.size = size; 
fontGenerator.generateData(freeTypeFontParameter); 
font = fontGenerator.generateFont(freeTypeFontParameter); 

//Initialize the spriteBatch as requirement 

GlyphLayout glyphLayout = new GlyphLayout(); 
String item = "Example"; 
glyphLayout.setText(font,item); 
float w = glyphLayout.width; 
font.draw(spriteBatch, glyphLayout, (Game.SCREEN_WIDTH - w)/2, y); 
İlgili konular