Cố gắng quấn đầu tôi xung quanh các cách để xử lý va chạm đúng cách trong một trò chơi được thiết kế xung quanh các thành phần.
Tôi thấy nhiều ví dụ có một số loại PhysicsComponent
được thêm vào danh sách các thành phần của thực thể nhưng việc triển khai thực tế làm tôi bối rối.
Để làm việc này, PhysicsComponent
sẽ cần truy cập vào thế giới xung quanh nó. Điều này không có ý nghĩa trực quan với tôi. Không phải một thành phần không nên biết về không chỉ container của nó (thực thể), mà cả container của nó (thế giới)?
Đối với tôi, có vẻ như cấp độ hoặc cảnh nên duy trì một danh sách các thực thể này và mỗi bản cập nhật trò chơi, lặp qua các thực thể để xác định va chạm nào.
Câu hỏi của tôi là thứ nhất, liệu đây có phải là thiết kế tốt hay không, và thứ hai, làm thế nào để xác định thực thể nào có thể va chạm. Tôi cho rằng các thực thể rắn có thể thực hiện giao diện IRigidBody trống để mức có thể xác định thực thể nào trong danh sách hỗ trợ xung đột. Nhưng điều này có phá vỡ thiết kế thành phần?
Thay vào đó, chúng có nên chứa một thành phần RigidBody trống không? Điều này thực sự có thể tốt hơn bởi vì nó có thể không phải lúc nào cũng trống rỗng và cách tiếp cận này là bằng chứng trong tương lai nhiều hơn. Vấn đề duy nhất với điều này là sự phức tạp. Cảnh sẽ phải lặp đi lặp lại không chỉ mọi thực thể, mà cả các thành phần của mọi thực thể để xác định xem nó có thành phần RigidBody này hay không.
Thứ ba, khi chúng va chạm cả hai thực thể nên được thông báo bằng cách nào đó và tôi không chắc chắn về cách thực hiện điều này.
Giả sử rằng cả hai thực thể đều chứa HealthComponent và khi chúng va chạm cả hai sức khỏe của chúng sẽ bị giảm đi bởi một số giá trị tùy ý, 5. Tôi cho rằng trách nhiệm của mình là xử lý việc này khi phát hiện va chạm giữa hai thực thể?
Nhưng sau đó là cảnh chịu trách nhiệm cho quá nhiều? Tôi có thể thấy điều này có thể thoát khỏi tầm tay và trở nên khó sử dụng khi cảnh chịu trách nhiệm cho nhiều thứ mà các thực thể không nên (?) Có quyền truy cập.
Chỉnh sửa: Câu hỏi cập nhật với nhiều chi tiết hơn.