2013-05-17 17 views

cevap

56

BitmapFont API piksel < 1.5.6

benim dize genişliği nasıl biliyorum çizeceksin.

BitmapFont.getBounds(String str).width 

BitmapFont API

Sen de çizim için ofset hakkı için yükseklikle alabilirsiniz. Sadece genişliği genişlikle değiştirin.

Çok satırlı metinlere ek olarak, sınırları almak için getMultiLineBounds(someString).width kullanın.


BitmapFont API> =

1.5.7 değişti BitmapFont API şimdi sınırları almak için farklı bir yol yoktur 1.5.6:

BitmapFont.TextBounds ve getBounds yapıldı. Bunun yerine, dizeyi GlyphLayout'a verin ve genişlik ve yükseklik alanlarını kullanarak sınırları alın. Daha sonra metni aynı GlyphLayout'u BitmapFont'a geçirerek çizebilirsiniz, bu da gliflerin eskiden olduğu gibi iki kez düzenlenmesini gerektirmez.

Source

Örnek: @Nates sorunun yanıtına göre

GlyphLayout layout = new GlyphLayout(); //dont do this every frame! Store it as member 
layout.setText("meow"); 
float width = layout.width;// contains the width of the current set text 
float height = layout.height; // contains the height of the current set text 
+0

Ayrıca bir çok satır metni için getMultiLineBounds (someString) .width kullanabilirsiniz. –

+0

Teşekkürler! problem çözüldü – LeSam

+2

Daha yeni libgdx sürümünde kullanımdan kaldırıldı. API'de bulamıyorum .... Bunu yapmanın başka bir yolu var mı? –

4

: https://stackoverflow.com/a/20759876/619673 çağıran yöntem

BitmapFont.getBounds(String str).width 

her zaman doğru genişliğini döndürür! Özellikle yazı tipini yeniden kullandığınız zaman.

font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER); 
0

ise: örneğin in the center of part of view port için metin çizmek istiyorsanız , başka bir yöntem

BitmapFont.drawWrapped (...)

Örnek kodu kullanarak bu sorunu önleyebilirsiniz UI'de kaplamalar kullanırsanız, GlyphLayout'a beslemek için doğru yazı tipini bulmak zor olur.

Bu durumda, benim için her şeyi hesaplamak için bir Atma örneğini kullanın ve ardından Etiket için genişlik isteyin.

Skin skin = getMySkin(); 
Label cellExample = new Label("888.88888", skin); 
cellExample.layout(); 
float cellWidth = cellExample.getWidth(); 

Table table = new Table(skin); 
table.defaults().width(cellWidth); 
// fill table width cells ... 

Eğer metnin kendini konumlandırmak istiyorsanız bu cevap değil, ama bir UI düzeni istikrarlı ve hücrelerin gerçek içeriği daha az bağımlı hale getirmek için yararlıdır.