Làm thế nào để hệ thống hạt làm việc?


7

Tôi muốn triển khai một hệ thống hạt trong trò chơi của mình, nhưng tôi chưa bao giờ lập trình một hệ thống hạt và không biết bắt đầu từ đâu.

Tôi chỉ muốn hiển thị ( GL_POINTcác) pixel với các kích thước khác nhau ở những nơi khác nhau, giống như Terraria hoặc Minecraft khi bạn nhấn một khối, không có kết cấu. Chỉ là một ví dụ đơn giản chết.

Kết quả tìm kiếm của Google cho điều này có xu hướng rất phức tạp hoặc không giải thích các khái niệm hoặc được viết bằng chữ C khó đọc mà không có OOP Hồi

Tôi đang sử dụng Java và OpenGL.

Câu trả lời:


9

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:

  1. 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.
  2. 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ị.
  3. 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.
  4. 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.
  5. 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.
  6. 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.


Cảm ơn vì bài đăng của bạn! Bây giờ tôi có ý tưởng rõ ràng về điều này. Tôi nghĩ rằng tôi sẽ nghỉ ngơi để hướng dẫn NeHe về các hệ thống hạt.
Puyover

NeHe là một nơi tuyệt vời, bạn sẽ không đi sai ở đó! May mắn nhất.
Patrick Hughes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.