2013-12-15 22 views
6

Tôi đang gặp phải sự cố khi cố gắng đặt một hệ thống văn bản/hộp thoại trong dự án trò chơi của mình. Khi tôi tạo ra một phông chữ và gọi phương thức vẽ trên nó đi qua spriteBatch được cập nhật của máy ảnh, mỗi pixel của phông chữ có cùng kích thước của một sprite.LibGDX sprite batch font bad scale rendering

tôi nhận được sau render:

font draw scale issue

Những gì bạn có thể thấy trên hình ảnh là đỉnh của "h" của "hello" với mỗi pixel quá khổ. Máy ảnh tương tự được sử dụng để hiển thị các ô/hình xếp.

Hiệu quả tôi muốn đạt được là tương tự như sau:

Elliot quest example

Đây là mã:

// 15 * 12 tile size 
    camera = new OrthographicCamera(Const.VIEWPORT_WIDTH, Const.VIEWPORT_HEIGHT); 
    BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonts/myfont.fnt")); 

    // .... 

    // p => player position 
    camera.position.x = p.getX(); 
    camera.position.y = p.getY(); 
    camera.update(); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    font.draw(batch, "hello", p.getX(), p.getY()); 
    batch.end(); 

Tôi đã cố gắng sử dụng font.setScale() không thành công.

Có ai đó biết cách đạt được điều này không?

Trả lời

6

Tạo máy ảnh với chế độ xem lớn hơn (ví dụ pixel hoàn hảo của thiết bị thử nghiệm của bạn). Và sử dụng điều đó để hiển thị phông chữ của bạn. Cũng không tạo ra một phông chữ mới mỗi render, tạo ra nó ngay từ đầu và sử dụng nó.

Edit:

Để tính toán vị trí bạn nên vẽ các văn bản, nó sẽ là như thế này. Giả sử camera thế giới của bạn được gọi là "cam" và camera văn bản của bạn được gọi là "guicam". Và một GameObject gọi là "đối tượng".

ratew = guicam.viewportWidth/cam.viewportWidth; //<--- you should calculate these 2 only once. 
rateh = guicam.viewportHeight/cam.viewportHeight; 

x = guicam.position.x-(cam.position.x-object.position.x)*ratew; 
y = guicam.position.y-(cam.position.y-object.position.y)*rateh; 
font.draw(batch, "stuff", x, y); 
+0

Cảm ơn bạn đã trả lời của bạn, nhưng tôi muốn các văn bản phối hợp để được giống như ma làm cho máy ảnh. Tôi có phải cập nhật điều phối theo cách thủ công không? –

+2

Đúng, bạn phải tính toán theo cách thủ công, tôi đã chỉnh sửa câu trả lời của mình để chỉ cho bạn cách thực hiện. – Lestat

+0

Nó hoạt động hoàn hảo, cảm ơn bạn rất nhiều vì câu trả lời hay này. –

-1

Bạn có thể thử Texture.TextureFilter.Linear cho min & bộ lọc tối đa.

Libgdx AssetManager phông chữ bitmap tải với các bộ lọc mong muốn:

BitmapFontLoader.BitmapFontParameter param = new BitmapFontLoader.BitmapFontParameter(); 
param.maxFilter = Texture.TextureFilter.Linear; 
param.minFilter = Texture.TextureFilter.Linear; 
assetManager.load(fileName, BitmapFont.class, param);