Tôi đã gặp câu hỏi này khi tôi đang thiết kế một trò chơi video trong C #.
Nếu chúng ta xem xét các trò chơi như Battlefield hay Call of Duty , hàng trăm hoặc thậm chí hàng ngàn viên đạn đang bay cùng một lúc. Các sự kiện được kích hoạt liên tục, và theo những gì tôi biết, điều này hút rất nhiều sức mạnh xử lý hay sao? Tôi muốn biết các nhà phát triển trò chơi khác nhau quản lý các viên đạn (2D và 3D) như thế nào và phương pháp hiệu quả nhất cho từng loại là gì.
Tôi đọc câu hỏi Làm thế nào các viên đạn được mô phỏng trong các trò chơi video? nhưng nó không chạm vào cách thức hoạt động của đạn từ quan điểm thiết kế chương trình.
Tôi đã có một vài ý tưởng, nhưng mỗi ý tưởng đều có nhược điểm:
Phương pháp hiệu quả nhất tôi có thể nghĩ ra (đối với các trò chơi 2D):
Giả sử tôi đã tạo một lớp có tên Bullet và trong bao lâu người dùng sẽ giữ một nút, cứ sau 0,01 giây sẽ tạo ra một đối tượng Bullet. Viên đạn này có:
1 vận tốc
2 Vị trí bắt đầu của nơi nó được bắn từ
3 kết cấu Sprite
4 Hiệu ứng tấn công
Vì viên đạn sẽ là lớp riêng của nó, nó có thể quản lý bản vẽ, di chuyển và người nghe hành động.
Bộ xử lý sẽ không khó để xử lý hàng ngàn đối tượng này được khởi tạo, sau đó bị hủy (khi hiệu ứng tấn công được kích hoạt)? Dung lượng RAM?
Phương pháp hiệu quả cho các trò chơi 3D - Một suy nghĩ khác mà tôi có là:
Hãy nói rằng tôi tạo ra một lớp vũ khí. Vũ khí này có nhiều tính năng khác nhau, một số trong đó:
1 Phát hiện nơi vũ khí đang nhắm và xác định xem nó có đang nhìn vào mục tiêu không
2 Kích hoạt hoạt hình bắn súng
3 Có phương thức doDamage () chỉ ra thứ gì đó trừ đi sức khỏe từ bất cứ thứ gì súng chĩa vào
4 Thông báo lớp hoạt hình đạn khi nhấn nút
Sau đó, tôi có thể tạo một lớp tĩnh, nói BulletAnimation, có thể nhận được thông báo từ nơi khẩu súng được kích hoạt, nơi khẩu súng được chĩa vào (đối với đích đạn), và thông tin về tốc độ và tốc độ phù hợp để sử dụng cho viên đạn . Lớp này sau đó vẽ các họa tiết (trên một luồng mới, có thể là idk) dựa trên cả hai vị trí và sprite mong muốn, để mô phỏng một viên đạn được bắn ra từ súng.
Cái sau có vẻ khó mã hóa hơn, và sẽ không mất nhiều sức mạnh xử lý để liên tục gọi tĩnh để làm điều này cho hàng ngàn viên đạn cùng một lúc? Nhận cập nhật liên tục trên cả hai vị trí bắt đầu và kết thúc cũng sẽ khó khăn.
Câu hỏi của tôi là, những người sáng tạo trò chơi hiệu quả nhất làm điều đó là gì? Phương pháp này có thay đổi từ trò chơi 2D sang 3D không?
pew-pew-pew
công nghệ :)