Tôi gặp sự cố khi hiển thị văn bản trên trò chơi của mình ở cùng kích thước trên các màn hình khác nhau và tôi đã thực hiện một thử nghiệm đơn giản.
Thử nghiệm này bao gồm để hiển thị một văn bản phù hợp ở màn hình, tôi muốn văn bản có cùng kích thước độc lập với màn hình và từ DPI.
Tôi đã tìm thấy điều này và câu trả lời này mà tôi nghĩ nên giải quyết vấn đề của mình nhưng không. Trong máy tính để bàn kích thước là ok, nhưng trong điện thoại của tôi là quá lớn.
Đây là kết quả trên Nexus 4 của tôi: (mật độ 768x1280, 2.0)
Và đây là kết quả trên MacBook của tôi: (mật độ 480x800, 0,6875)
Tôi đang sử dụng Open Sans Condensed (liên kết đến phông chữ google)
Như bạn có thể thấy trên máy tính để bàn có vẻ tốt, nhưng trên điện thoại thì quá lớn.
Đây là mã kiểm tra của tôi:
public class TextTest extends ApplicationAdapter
{
private static final String TAG = TextTest.class.getName();
private static final String TEXT = "Tap the screen to start";
private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private BitmapFont font;
@Override
public void create ()
{
Gdx.app.log(TAG, "Screen size: "+Gdx.graphics.getWidth()+"x"+Gdx.graphics.getHeight());
Gdx.app.log(TAG, "Density: "+Gdx.graphics.getDensity());
camera = new OrthographicCamera();
viewport = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getWidth(), camera);
batch = new SpriteBatch();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/OpenSans-CondLight.ttf"));
font = createFont(generator, 64);
generator.dispose();
}
private BitmapFont createFont(FreeTypeFontGenerator generator, float dp)
{
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
int fontSize = (int)(dp * Gdx.graphics.getDensity());
parameter.size = fontSize;
Gdx.app.log(TAG, "Font size: "+fontSize+"px");
return generator.generateFont(parameter);
}
@Override
public void render ()
{
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
int w = -(int)(font.getBounds(TEXT).width / 2);
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.setColor(Color.BLACK);
font.draw(batch, TEXT, w, 0);
batch.end();
}
@Override
public void resize(int width, int height)
{
viewport.update(width, height);
}
@Override
public void dispose()
{
font.dispose();
batch.dispose();
}
}
Tôi đang cố gắng tìm một cách gọn gàng để khắc phục điều này. Tôi đang làm gì sai? là máy ảnh? khung nhìn?
CẬP NHẬT:
Những gì tôi muốn là giữ tỷ lệ lợi nhuận tương tự, độc lập với kích thước hoặc độ phân giải màn hình. Hình ảnh này minh họa những gì tôi có ý nghĩa.