Có hợp lý không khi sử dụng FreeType [đã đóng]


8

Sẽ không làm chậm trò chơi của tôi nếu tôi sử dụng FreeType lib và chuyển đổi 2 phông chữ từ .ttf thay vì sử dụng BitmapFont .png đã tải sẵn? Hoặc có thể là FreeType nhanh đến mức tôi có thể sử dụng phông chữ theo cả hai cách? Tất cả tôi cần là thay đổi màu sắc và kích thước của văn bản của tôi. PS tôi sử dụng 3 phông chữ trong dự án của tôi


Bỏ phiếu để đóng, vì câu trả lời sẽ hoàn toàn dựa trên ý kiến. Những gì "quá chậm" sẽ luôn chủ quan cho ứng dụng. Giải mã phông chữ freetype 60 lần một giây có thể sẽ quá chậm, trong khi tải phông chữ một lần khi khởi động có thể sẽ không có gì khác biệt, nhưng mọi thứ ở giữa sẽ luôn phụ thuộc vào ứng dụng, phông chữ và mọi thứ khác. Tải png thậm chí có thể mất nhiều thời gian hơn tải phông.
Bạo loạn

@Riot, vì vậy để trả lời "nó sẽ làm chậm ứng dụng của tôi", bạn nói "có" . Tôi không thấy bất kỳ yêu cầu nào cho "quá" chậm, ở đây. VTLO.
Gnemlock

Tôi không nói rằng "nó sẽ làm chậm ứng dụng của bạn". Tải một phông chữ mất thời gian, nhưng điều đó có thể được thực hiện một lần, khiến bạn mất 5ms một lần khi bắt đầu và điều đó - hoặc nó có thể khiến bạn mất rất nhiều thời gian nếu bạn tiếp tục tải các phông chữ mới, điều đó phụ thuộc hoàn toàn vào cách bạn đang thực hiện nó Tải một png chi phí thời gian của bạn, quá. Bất cứ điều gì ứng dụng của bạn làm sẽ "làm chậm nó" từ quan điểm logic. Không thể có câu trả lời chung ở đây.
Bạo loạn

Câu trả lời:


13

Nếu bạn sử dụng một công cụ kết xuất phông chữ như FreeType, thì lỗi phổ biến nhất là kết xuất lại chuỗi mỗi khung. Điều này là vô nghĩa, bởi vì khi bạn kết xuất một chuỗi, nó thường sẽ ở trên màn hình không thay đổi trong ít nhất vài giây.

Khi bạn muốn hiển thị một văn bản, kết xuất văn bản đó thành một kết cấu một lần và sau đó vẽ kết cấu đó thay vì hiển thị lại văn bản. Khi bạn thực hiện việc này, chi phí kết xuất văn bản sẽ chỉ áp dụng lần đầu tiên bạn cần kết xuất một chuỗi đã cho với các cài đặt đã cho. Trên bất kỳ khung tiếp theo nào, chi phí hiển thị chuỗi đó cũng giống như khi vẽ bất kỳ sprite nào khác có kích thước đó.

Một giải pháp mà tôi thấy khá tiện dụng trong các dự án khác nhau là có một TextRenderingCachelớp để quản lý kết xuất phông chữ được lưu trong bộ nhớ cache. Nó thường có một bảng băm với các chuỗi cài đặt kết xuất (phông chữ, màu sắc, kích thước, v.v.) làm khóa và kết cấu với kết xuất dưới dạng giá trị. Khi một kết xuất đã cho được yêu cầu từ lớp TextRenderingCache, nó sẽ kiểm tra xem nó đã có kết xuất đó chưa và nếu không thì nó sẽ tạo một kết xuất. Bỏ các kết xuất từ ​​bản đồ băm không được sử dụng trong vài giây để tránh rò rỉ bộ nhớ là tùy chọn (một số trò chơi cần điều này, một số thì không).

Nhân tiện: FreeType đã đi kèm với một hệ thống bộ đệm kết xuất . Nhưng nó chỉ được sử dụng khi bạn sử dụng nó một cách rõ ràng.


4

Vâng, Freetype là hợp lý. Nếu bạn sử dụng tệp .png, bạn phải tạo một tệp cho MỌI kích thước và MERYI màu, và có thể chiếm 10 lần dung lượng mà tệp .ttf chiếm. Tạm biệt, không gian miễn phí trên thiết bị Android và iOS. Hơn nữa, bạn chỉ cần lấy 1 tệp .ttf, và đó là nó. Hy vọng tôi đã giúp bạn!


2
Bạn có thể sử dụng SDF và shader - một bitmap cho mỗi phông chữ cho tất cả các kích cỡ và màu sắc. Tuy nhiên, một lần nữa, hiệu suất của Freetype có lẽ nên là điều cuối cùng người ta nên xem xét tối ưu hóa.
wonderra
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.