2013-05-17 26 views

Trả lời

56

BitmapFont API < 1.5.6

Để mesure chiều rộng của một String bạn sử dụng Font của bạn và nhận được bounds của String, bạn sẽ vẽ.

BitmapFont.getBounds(String str).width 

BitmapFont API

Bạn có thể lấy chiều cao để cho quyền bù đắp cho việc vẽ quá. Chỉ cần thay chiều rộng bằng chiều cao.

Ngoài các văn bản nhiều dòng, hãy sử dụng getMultiLineBounds(someString).width để nhận giới hạn.


BitmapFont API> = 1.5.6

API BitmapFont thay đổi trong 1.5.7 nên có một cách khác nhau để có được những giới hạn bây giờ:

BitmapFont.TextBounds và getBounds được thực hiện. Thay vào đó, hãy cung cấp chuỗi cho GlyphLayout và nhận các giới hạn sử dụng các trường chiều rộng và chiều cao của nó. Sau đó, bạn có thể vẽ văn bản bằng cách chuyển cùng một GlyphLayout với BitmapFont, có nghĩa là các hình tượng không phải được đặt ra hai lần như trước đây.

Source

Ví dụ:

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

Cũng có thể sử dụng getMultiLineBounds (someString) .width cho nhiều dòng văn bản. –

+0

cảm ơn bạn! vấn đề được giải quyết – LeSam

+2

Phiên bản cũ của nó đã bị ngừng sử dụng trong phiên bản libgdx mới hơn. Tôi không thể tìm thấy nó trong API .... Là một cách khác để làm điều đó? –

4

Theo @Nates câu trả lời: https://stackoverflow.com/a/20759876/619673 gọi phương thức

BitmapFont.getBounds(String str).width 

phải lúc nào cũng trả về chiều rộng thích hợp! Đặc biệt là khi bạn đang sử dụng lại phông chữ. Nếu bạn muốn vẽ văn bản ví dụ in the center of part of view port, bạn có thể tránh vấn đề này bằng cách sử dụng phương pháp khác

BitmapFont.drawWrapped (...) mã

Ví dụ:

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

Nếu bạn sử dụng giao diện người dùng trong giao diện người dùng, thật khó để tìm ra phông chữ chính xác để nạp vào GlyphLayout.

Trong trường hợp này tôi sử dụng một trường hợp ném đi của Nhãn để tìm mọi thứ cho tôi, sau đó hỏi Nhãn cho chiều rộng.

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 ... 

Đây không phải là câu trả lời nếu bạn muốn bố cục văn bản ổn định và ít phụ thuộc vào nội dung thực tế của ô.

Các vấn đề liên quan