Tôi tự hỏi biết làm thế nào để có được những rộng của chuỗi của tôi bằng pixelLàm cách nào để có chiều rộng chuỗi trong Libgdx?
Trả lời
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
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.
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
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);
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ũng có thể sử dụng getMultiLineBounds (someString) .width cho nhiều dòng văn bản. –
cảm ơn bạn! vấn đề được giải quyết – LeSam
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 đó? –