Hiện tại tôi đang phải đối mặt với vấn đề sau:
Tôi đang cố gắng viết một bản sao pong bằng cách sử dụng một hệ thống thành phần thực thể (ECS). Tôi đã tự viết "khung". Vì vậy, có một lớp quản lý các thực thể với tất cả các thành phần. Sau đó, có các lớp thành phần chính mình. Và cuối cùng là các hệ thống của tôi chỉ nhận được tất cả các thực thể có các thành phần mà hệ thống cần.
Vì vậy, ví dụ hệ thống chuyển động của tôi tìm kiếm tất cả các thực thể có thành phần vị trí và thành phần chuyển động. Thành phần vị trí chỉ giữ vị trí và thành phần chuyển động giữ tốc độ.
Nhưng vấn đề thực tế là hệ thống va chạm của tôi. Lớp học này giống như một đốm màu logic. Tôi có rất nhiều trường hợp đặc biệt trong lớp này.
Ví dụ: Mái chèo của tôi có thể va chạm với các đường viền. Nếu điều này xảy ra, tốc độ của chúng được đặt thành không. Bóng của tôi cũng có thể va chạm với biên giới. Nhưng trong trường hợp này, tốc độ của nó chỉ được nhân đôi ở mức bình thường của đường viền nên nó được phản ánh. Để làm điều này, tôi đã cho quả bóng một thành phần vật lý bổ sung mà chỉ nói: "Này, thứ này không dừng lại, nó phản ánh." Vì vậy, thực sự, thành phần vật lý không có dữ liệu thực. Đó là một lớp trống chỉ ở đó để báo cho hệ thống nếu một đối tượng phản ánh hoặc dừng lại.
Sau đó là điều này: Tôi muốn kết xuất một số hạt khi quả bóng va chạm với mái chèo hoặc đường viền. Vì vậy, tôi nghĩ rằng quả bóng phải có một thành phần khác nói với hệ thống va chạm để tạo ra hạt khi va chạm.
Sau đó, tôi muốn có sức mạnh có thể va chạm với mái chèo nhưng không phải với biên giới. Nếu điều đó xảy ra, sức mạnh phải biến mất. Vì vậy, tôi sẽ cần nhiều trường hợp và thành phần hơn (để nói với hệ thống rằng một số thực thể chỉ có thể va chạm với một số người khác, bot không phải với tất cả ngay cả khi một số người khác thực sự có thể va chạm, hơn nữa hệ thống va chạm phải áp dụng tăng sức mạnh cho các mái chèo, vv, vv, vv).
Tôi thấy rằng hệ thống thành phần thực thể là một điều tốt bởi vì nó linh hoạt và bạn không gặp vấn đề với sự kế thừa. Nhưng tôi hoàn toàn bị mắc kẹt hiện tại.
Tôi có suy nghĩ quá phức tạp không? Làm thế nào tôi nên đối phó với vấn đề này?
Chắc chắn, tôi phải tạo ra các hệ thống thực sự chịu trách nhiệm cho "hậu va chạm", vì vậy hệ thống va chạm chỉ nói "Có, chúng tôi có va chạm ở khung cuối" và sau đó có một loạt các hệ thống "sau va chạm" tất cả yêu cầu các thành phần (kết hợp) khác nhau và sau đó thay đổi các thành phần. Ví dụ, sẽ có một hệ thống sau va chạm chuyển động ngăn chặn những thứ phải dừng lại khi va chạm xảy ra. Sau đó, một hệ thống vật lý sau va chạm phản ánh sự vật, vv
Nhưng điều này dường như cũng không phải là một giải pháp thích hợp với tôi, vì ví dụ:
- Hệ thống sau va chạm chuyển động của tôi sẽ cần các thực thể có thành phần vị trí, thành phần chuyển động và thành phần va chạm. Sau đó, nó sẽ đặt tốc độ của thực thể bằng không.
- Hệ thống sau va chạm vật lý sẽ cần các thực thể có thành phần vị trí, thành phần chuyển động, thành phần va chạm và thành phần vật lý. Sau đó, nó sẽ phản ánh vector tốc độ.
Vấn đề là rõ ràng: Chuyển động sau va chạm cần các thực thể là tập hợp con của các thực thể trong hệ thống sau va chạm vật lý. Vì vậy, hai hệ thống sau va chạm sẽ hoạt động trên cùng một dữ liệu, hiệu quả là: Mặc dù một thực thể có thành phần vật lý, tốc độ sẽ bằng không sau một vụ va chạm.
Làm thế nào những vấn đề này được giải quyết nói chung trong một hệ thống thành phần thực thể? Là những vấn đề thậm chí bình thường hoặc tôi đang làm gì đó sai? Nếu có, những gì và làm thế nào nó nên được thực hiện thay thế?