IMHO có ba lý do để sử dụng OpenGL ES trong trò chơi:
- Tránh sự khác biệt giữa các nền tảng di động bằng cách sử dụng một tiêu chuẩn mở;
- Để có nhiều quyền kiểm soát quá trình kết xuất;
- Để hưởng lợi từ việc xử lý song song GPU;
Vẽ văn bản luôn là một vấn đề trong thiết kế trò chơi, bởi vì bạn đang vẽ mọi thứ, vì vậy bạn không thể có giao diện của một hoạt động chung, với các vật dụng, v.v.
Bạn có thể sử dụng khung để tạo phông chữ Bitmap từ phông chữ TrueType và hiển thị chúng. Tất cả các khung tôi đã thấy hoạt động theo cùng một cách: tạo tọa độ đỉnh và kết cấu cho văn bản trong thời gian vẽ. Đây không phải là cách sử dụng OpenGL hiệu quả nhất.
Cách tốt nhất là phân bổ bộ đệm từ xa (đối tượng bộ đệm đỉnh - VBO) cho các đỉnh và kết cấu sớm trong mã, tránh các hoạt động chuyển bộ nhớ lười biếng trong thời gian vẽ.
Hãy nhớ rằng người chơi trò chơi không thích đọc văn bản, vì vậy bạn sẽ không viết một văn bản được tạo động dài. Đối với nhãn, bạn có thể sử dụng họa tiết tĩnh, để lại văn bản động theo thời gian và điểm số và cả hai đều là số có một vài ký tự.
Vì vậy, giải pháp của tôi rất đơn giản:
- Tạo kết cấu cho các nhãn và cảnh báo phổ biến;
- Tạo kết cấu cho các số 0-9, ":", "+" và "-". Một kết cấu cho mỗi nhân vật;
- Tạo VBO từ xa cho tất cả các vị trí trong màn hình. Tôi có thể hiển thị văn bản tĩnh hoặc động ở các vị trí đó, nhưng VBO là tĩnh;
- Tạo chỉ một Texture VBO, vì văn bản luôn được hiển thị một chiều;
- Trong thời gian vẽ, tôi kết xuất văn bản tĩnh;
- Đối với văn bản động, tôi có thể nhìn trộm vị trí VBO, lấy kết cấu ký tự và vẽ nó, một ký tự tại một thời điểm.
Thao tác vẽ rất nhanh, nếu bạn sử dụng bộ đệm tĩnh từ xa.
Tôi tạo một tệp XML với các vị trí màn hình (dựa trên tỷ lệ phần trăm đường chéo của màn hình) và kết cấu (tĩnh và ký tự), sau đó tôi tải XML này trước khi kết xuất.
Để có được tốc độ FPS cao, bạn nên tránh tạo VBO vào thời gian bốc thăm.