Làm cách nào để có được văn bản nhỏ đẹp trong XNA mà không cần sử dụng các thư viện bên ngoài?


13

Trong XNA, công nghệ spritefont thật kinh khủng. Nuclex thực hiện công việc tốt hơn rất nhiều, nhưng tôi không muốn có bất kỳ tài liệu tham khảo bên ngoài nào và tôi gần như đã hoàn thành trò chơi của mình.

Khi sử dụng các phông chữ như Sansation hoặc Quicksand, nó trông khủng khiếp ở kích thước nhỏ hơn của các phông chữ. Thật tệ!

Có một cách giải quyết được biết đến cho điều này? Tôi đã cố gắng thiết lập các phông chữ ở mức cực kỳ cao, và sau đó thu nhỏ chúng trong spritebatch mà không gặp may.


Tôi sử dụng SpriteFont để tạo phông chữ cho XNA, bạn có rất nhiều tính linh hoạt. Tôi cũng đảm bảo rằng vị trí của phông chữ là một số nguyên để không xảy ra hiện tượng khử răng cưa khó chịu, nhưng đây có lẽ không phải là một giải pháp tuyệt vời. Bạn cũng có thể thử lọc điểm trong các cuộc gọi spritebatch văn bản của mình.
Jonathan Connell

Đừng quên kiểm tra phông chữ nhỏ của bạn trên nhiều thiết bị và người thật. Nếu đó là một tiêu đề 360 và do đó nhắm mục tiêu TV, kích thước của tất cả các yếu tố hình ảnh có xu hướng cần phải lớn hơn một chút so với trên màn hình PC.
Lars Viklund

Tôi đang làm một trò chơi trên PC và kích thước phông chữ được đặt thành một số nguyên.
Mathias Lykkegaard Lorenzen

1
Không chia tỷ lệ văn bản, tạo một spritefont cho mọi kích thước bạn cần.
Wouter

1
Một số quy tắc cho bạn ở đây. Kẹp vectơ vị trí vào số nguyên trước khi kết xuất, nếu không việc lấy mẫu sẽ làm cho văn bản đầu ra của bạn trông thật rác rưởi . Có thể đáng để thay đổi bộ lấy mẫu kết cấu thành Điểm / Hàng xóm gần nhất trước khi hiển thị văn bản. Đặc biệt nếu phông chữ của bạn được pixelated :)
Cubed2D

Câu trả lời:



13

Bộ xử lý phông chữ XNA sử dụng nén DXT3 không hoạt động tốt với alpha tiền xử lý mới trong XNA 4.0. Do đó, cái nhìn khối của văn bản.

Bộ xử lý phông chữ Nuclex sprite xuất ra chính xác cùng một dữ liệu, ngoại trừ phần bên trong Texture2Dchứa dữ liệu bitmap phông chữ không được nén - vì vậy nó không có vấn đề về chất lượng.

Vì dữ liệu từ bộ xử lý Nuclex có cùng định dạng, SpriteFonttrình đọc XNA có thể đọc nó và bạn không cần đưa vào bất kỳ thư viện Nuclex nào để phân phối với trò chơi của mình.

(Nó cũng thuận tiện cho phép bạn sử dụng định dạng XML giống như các định nghĩa phông chữ gốc của XNA.)

Điều đó đang được nói: không có gì sai khi kết hợp các thư viện bên ngoài với trò chơi của bạn. Nó không giống như họ được cài đặt trên hệ thống của bạn hoặc bất cứ điều gì. (Bạn thậm chí có thể đi xa đến mức hợp nhất hai hội đồng).

Và điều tương tự cũng xảy ra với mã (ví dụ nếu bạn lo lắng về kiểm soát phiên bản). Bạn chỉ có thể đưa Nuclex.Fonts.Content.TrueTypeImporter.dllvào với mã nguồn của bạn. Nó thực sự không phải là một vấn đề lớn.


9

Bạn có thể sử dụng phông chữ pixel :

biến thể pf tempesta

Khi bạn sử dụng phông chữ pixel ở kích thước phông chữ, nó được thiết kế cho (hoặc toàn bộ bội số của nó, ví dụ: 2x, 3x, 4x), bạn được đảm bảo văn bản hoàn hảo pixel không yêu cầu khử răng cưa. Điều này có nghĩa là bạn không bao giờ phải đối phó với việc khử răng cưa khủng khiếp khiến phông chữ sprite của XNA trở nên tồi tệ và Nuclex tốt hơn rất nhiều. ( Bài viết này xem xét vấn đề đó và so sánh chúng)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.