Tôi nghĩ rằng cụm từ chính là hệ thống hạt nên hầu hết các mẫu trong tự nhiên sẽ phức tạp hơn bạn nghĩ là một minh chứng đơn giản nên có. OOP không thực sự tham gia vào phần cấp thấp của các hệ thống hạt và C rất dễ dàng chuyển đổi sang các ngôn ngữ khác vì vậy tôi sẽ không lo lắng về điều đó.
Mẹo cho các hạt là bạn muốn hiển thị RẤT NHIỀU và càng nhanh càng tốt, đó là màu sắc các loại mã bạn sẽ thấy vì mọi thứ được tối ưu hóa theo cách này hay cách khác.
Ở dạng đơn giản nhất, một hệ thống hạt cho hiệu ứng văng nhanh sẽ có các yếu tố sau:
- Một người quản lý để theo dõi tất cả các hệ thống của bạn và cung cấp quyền kiểm soát toàn cầu cho tất cả các hiệu ứng.
- Mảng "điểm" trong đó mỗi điểm có vị trí, vận tốc, thời gian sống, kích thước hiển thị.
- Một hàm để tạo mảng đó với vị trí bắt đầu và (có thể) vận tốc ngẫu nhiên và thời gian sống.
- Một chức năng để chạy một mô phỏng trên mảng đó, điều này có thể mất một thời gian delta kể từ cuộc gọi mô phỏng cuối cùng.
- Một chức năng để lấy các vị trí và kích thước hiển thị và hiển thị sau đó trong OpenGL.
- Và cuối cùng, một người giám sát để ngăn hệ thống đó chơi khi tất cả các điểm đã chết.
Tổ chức các chức năng có thể là OOP ở các cấp cao hơn miễn là các vòng bên trong giữ cho chính chúng trong nhiệm vụ tìm kiếm tốc độ. Chuỗi mã giả siêu lỏng lẻo bên dưới, bỏ qua rất nhiều chi tiết và trộn và kết hợp các khái niệm C thẳng với một OOP nhảm nhí được ném vào nhưng tôi hy vọng nó có ý nghĩa. Thiết kế lớp cho việc này sẽ là toàn bộ cuộc thảo luận khác =)
Ví dụ của bạn, bạn trúng một viên gạch ở vị trí thế giới (10,20,30). Sau đó, bạn gọi cho người quản lý và yêu cầu nó khởi động một hệ thống hạt điểm mới tại vị trí đó. Người quản lý sau đó yêu cầu PointsClass tự tạo tại vị trí (10,20,30). Lớp phân bổ và ngẫu nhiên hóa thời gian sống, v.v ... Người quản lý sau đó gọi tất cả các hệ thống hạt hoạt động mà nó điều khiển mỗi khung hình bằng một cuộc gọi mô phỏng. Sau khung đó, nó yêu cầu PointsClass tự vẽ vào bối cảnh GL. Lặp lại cho đến khi hoàn thành.