Tôi hiện đang làm việc trên một trò chơi Flash platformer rất lớn (hàng trăm lớp) và giải quyết một vấn đề mà trò chơi từ từ dừng lại nếu bạn để nó đủ lâu. Tôi đã không viết trò chơi và vì vậy tôi chỉ mơ hồ quen thuộc với nội bộ của nó. Một số triệu chứng bí ẩn bao gồm,AS3 giảm hiệu suất trò chơi lớn theo thời gian
- Trò chơi sẽ chạy tốt trong một khoảng thời gian xác định (trên một mức nhất định) khi đột ngột bắt đầu rò rỉ bộ nhớ.
- Thời gian cần thiết để trò chơi đạt đến điểm mà nó bị rò rỉ theo cấp số nhân ngắn hơn khi có nhiều hình họa trên màn hình.
- Ngay cả khi không có gì hiển thị rõ ràng trên màn hình, trò chơi sẽ chậm lại.
- Trò chơi sẽ chậm hơn với các va chạm sprite thường xuyên hơn.
- Hoàn toàn vô hiệu hóa mã xung đột sẽ làm chậm sự xuống cấp nhưng không ngăn trò chơi từ bỏ khung hình cuối cùng.
Nhìn vào nguồn và sử dụng Flex profiler, nghi phạm chính của tôi là,
- Có rất nhiều đối tượng lảng vảng, đặc biệt là
WeakMethodClosure
, chiếm một lượng lớn bộ nhớ. - Chương trình sử dụng vô cùng rộng rãi các trình nghe sự kiện yếu (hàng chục được gửi cho mỗi khung).
- BitmapData đang được sao chép mỗi lần tạo một sprite mới. Đây là những sprites 50x50 pixel sinh ra ở khoảng 8 sprites mỗi giây.
Tôi biết không thể nói cho tôi biết sự cố mà không thấy nguồn, vì vậy tôi chỉ tìm kiếm các mẩu tin có thể giúp tôi thu hẹp điều này. Có ai đã trải qua sự suy thoái hiệu suất lảng tránh này trong các dự án của riêng họ không? Nguyên nhân trong trường hợp của bạn là gì?
Tôi nghĩ rằng đây là lời khuyên tuyệt vời cho ai đó vừa bắt đầu một dự án chơi game lớn và tự hỏi làm thế nào để cấu trúc nó tốt nhất. – Kai