[Đăng lại câu hỏi này từ stackoverflow, vì nó đã chỉ ra rằng nó phù hợp hơn ở đây.]
Tôi hiện đang chuyển công cụ trò chơi 2D của mình sang Java. Tôi đã xem xét một số thư viện trò chơi được chỉ ra ở đây trên stackoverflow. Tuy nhiên, những cái tôi nhìn vào khá đơn giản và thậm chí không nói rõ nếu chúng hỗ trợ những thứ như độ trong suốt alpha, vì vậy tôi quyết định chuyển trình kết xuất C ++ của mình mà tôi đã viết ra logic.
Trình kết xuất này là trình kết xuất phần mềm thuần túy sử dụng ốp lát để tránh kết xuất lại không cần thiết. Tôi đã tối ưu hóa hiệu suất cuộn của nó bằng cách tạo ra "bộ đệm ngoài màn hình" lớn hơn một chút so với khung đầu ra của tôi và đưa bộ đệm ngoài màn hình này vào đầu ra của tôi trên mỗi khung hình. Bằng cách này, tôi có thể tránh vẽ lại các ô một cách không cần thiết chỉ vì tôi đã cuộn một pixel trên bản đồ.
Tôi đã sử dụng AWT của Java để triển khai nó, sử dụng BufferedImage lớn cho bộ đệm ngoài màn hình. Việc sử dụng CPU vẫn ổn (khoảng hai lần so với những gì tôi có trong C ++), nhưng có một vấn đề kỳ lạ với việc cuộn liên tục, trong đó mỗi giây hoặc lâu hơn, trình kết xuất sẽ bị trễ trong khoảng 0,2 giây.
Vì không có gì trong mã của riêng tôi sẽ xảy ra trong các giai đoạn này và vì các xung đột biến mất nếu tôi không vẽ bộ đệm ngoài màn hình của mình lên khung nhìn chính, tôi chỉ có thể kết luận rằng Java đang tự tối ưu hóa nội bộ. Tuy nhiên, tôi không chắc nó làm gì, tôi cũng không biết mình sẽ phải loại bỏ tối ưu hóa nào để loại bỏ các gai nhọn. Ngoài ra, có thể java AWT không được tạo ra với tính năng cuộn FPS liên tục, cao và điều đó hoàn toàn không thể sử dụng cho mục đích này.
Có cách nào để tôi thoát khỏi những cái gai này không?