Vấn đề
Với framework tạo hoạt cảnh đã đề xuất, game đã hoạt động tốt với hình ảnh có chuyển động. Tuy nhiên vấn đề nảy sinh là thời gian thực hiện hoàn tất một vòng của qui trình trên là không giống nhau thậm chí ngay cả khi hình ảnh giống nhau thì thời gian hoàn thành vẫn khác nhau vì nhiều nguyên nhân khác nhau: phần cứng (tốc độ xử lý của các bộ xử lý khác nhau thì khác nhau), hệ điều hành, các dịch vụ chạy ngầm, ....Đây cũng chính là nhược điểm lớn nhất của cơ chế sử dụng vòng lặp hoạt cảnh để xử lý game. Chính thời gian xử lý mỗi khung hình khác nhau đã làm cho tốc độ thể hiện hình ảnh trên màn hình không đều, lúc nhanh, lúc chậm gây cảm giác khó chịu cho người chơi.
Vậy vấn đề đặt ra là làm sao để làm thời gian dựng hình được đều hơn hay nói cách khác là làm cho chỉ số FPS-Frame Per Second (tổng số khung hình trên giây) ổn định. Qua đó, tìm ra giá trị FPS phù hợp.
Giải pháp
Giải pháp chúng em chọn là thêm 1 khoảng thời gian ngủ (sleep) sau mỗi một chu kì thực hiện các bước update, render và draw ở trên. Khoảng thời gian ngủ này không những làm cho FPS được tương đối ổn định mà còn giúp cho CPU có thêm thời gian để giải quyết các vấn đề sau mỗi lần lặp như bộ thu gom rác làm nhiệm vụ (đặc biệt quan trọng với tài nguyên hạn hẹp của di động), tiếp nhận các xử lý khác,…
Tuy nhiên, thời gian ngủ bao nhiêu là phù hợp? Thời gian ngủ được thêm vào mỗi chu kỳ có tác dụng giúp cho thời gian hoàn thành mỗi chu kỳ ổn định hơn nên nó không thể là một giá trị cố định. Vậy thời gian ngủ sẽ được tính như thế nào để làm cho FPS được ổn định? Ở đây chúng em đề xuất thời gian ngủ được tính dựa trên “Độ phân giải thời gian” được định nghĩa là lượng thời gian chênh lệch giữa hai lần gọi hàm thời gian của hệ thống liên tiếp. Nếu ta lấy thời gian hệ thống lần thứ nhất ở đầu vòng lặp và lần thứ hai lấy sau khi đã thực hiện xong thao tác Draw thì thời gian ngủ là độ chênh lệch giữa hai giá trị này với thời gian phù hợp tính toán dựa trên FPS. Giá trị FPS sẽ được xác định dựa trên tốc độ của game mà ta muốn xây dựng. Công thức xác định thời gian sleep t:
t = tpc – (T2-T1) t: thời gian sleep.
tpc: khoảng thời gian được tính dựa trên FPS.
T1, T2: thời gian hệ thống tại thời điểm đầu và cuối vòng lặp.
Cuối cùng, việc ta cần xác định là giá trị FPS cho game bao nhiêu là phù hợp? Đối với mắt của người bình thường thì tần số chớp nháy có thể xem là liên tục là vào khoảng 10–50 Hz, tần số này phụ thuộc vào nhiều yếu tố như: ánh sáng, khả năng bao quát khung hình (đối với khung hình lớn thì phụ thuộc vị trí mắt nhìn, màu sắc, chi tiết hình ảnh,...). Vì khả năng xử lý của mobile rất hạn chế với khung hình lớn mà chúng em chọn (480 x 640) nên giá trị FPS thích hợp vào khoảng 10Hz. Do mắt người vẫn còn cảm giác nhìn thấy ảnh đã đi qua trong khoảng thời gian 0.1s nên 10Hz tương ứng với 10 khung hình/s là con số vừa đủ để mắt người không nhận ra sự thay đổi giữa các tấm ảnh.
Kết luận
Bằng việc thêm một khoảng thời gian sleep vào cuối mỗi chu kỳ thực hiện cơ chế xử lý game nên tốc độ game đã ổn định hơn trước. Từ đó, chu kỳ thực hiện của game thêm vào một bước sleep vào cuối chu kỳ.
Hình 5-33-Qui trình xử lý game sau khi thêm bước sleep cuối chu kỳ