Sau khi xem qua một vài mẫu thiết kế trò chơi, tôi đã giải quyết với Entity-Element-System (ES System) cho công cụ trò chơi của mình. Tôi đã đọc các bài viết (chủ yếu là T = Machine ) và xem xét một số mã nguồn và tôi nghĩ rằng tôi đã có đủ để bắt đầu.
Chỉ có một ý tưởng cơ bản mà tôi đang đấu tranh. Làm thế nào để tôi đối phó với các nhóm thực thể phụ thuộc lẫn nhau?
Hãy để tôi sử dụng một ví dụ:
Giả sử tôi đang thực hiện một game bắn súng trên cao tiêu chuẩn (nghĩ Jamestown ) và tôi muốn xây dựng một "thực thể ông chủ" với nhiều phần riêng biệt nhưng được kết nối. Sự đổ vỡ có thể trông giống như thế này:
- Thân tàu: Chuyển động, kết xuất
- Pháo: Vị trí (bị khóa tương đối với thân tàu), Theo dõi \ Bắn vào anh hùng, Nhận sát thương cho đến khi bị vô hiệu hóa
- Lõi: Vị trí (bị khóa so với thân tàu), Theo dõi \ Bắn vào anh hùng, Gây sát thương cho đến khi bị vô hiệu hóa, Vô hiệu hóa (er ... phá hủy) tất cả các thực thể khác trong nhóm tàu
Mục tiêu của tôi sẽ là thứ gì đó sẽ được xác định (và thao túng) như một yếu tố trò chơi riêng biệt mà không phải viết lại hệ thống con tạo thành nền tảng mỗi khi tôi muốn xây dựng một Thành phần tổng hợp mới.
Làm cách nào để triển khai loại thiết kế này trong Hệ thống ES?
- Tôi có thực hiện một số loại quan hệ thực thể cha-con (thực thể có thể có con) không? Điều này dường như mâu thuẫn với phương pháp luận rằng các Thực thể chỉ là vật chứa rỗng và khiến nó cảm thấy OOP nhiều hơn.
- Tôi có triển khai chúng dưới dạng các thực thể riêng biệt, với một số loại kết nối Thành phần (BossComponent) và hệ thống liên quan (BossSubSystem) không? Tôi không thể không nghĩ rằng điều này sẽ khó thực hiện vì cách các thành phần giao tiếp dường như là một cái bẫy lớn.
- Tôi có triển khai chúng dưới dạng một Thực thể, với một bộ sưu tập các thành phần (ShipComponent, CannonComponents, CoreComponent) không? Điều này dường như xoay quanh ý định của Hệ thống ES (các thành phần ở đây có vẻ quá giống các thực thể nặng), nhưng tôi biết điều này nên tôi nghĩ rằng tôi sẽ đưa nó ra ngoài đó.
- Tôi có thực hiện chúng như một cái gì đó khác mà tôi đã đề cập không?
Tôi biết rằng điều này có thể được thực hiện rất dễ dàng trong OOP, nhưng việc tôi chọn ES trên OOP là một điều mà tôi sẽ gắn bó. Nếu tôi cần phải phá vỡ lý thuyết ES thuần túy để thực hiện thiết kế này thì tôi sẽ (không giống như tôi chưa phải thỏa hiệp thiết kế thuần túy trước đây), nhưng tôi thích làm điều đó vì lý do hiệu suất hơn là bắt đầu với thiết kế xấu.
Để có thêm tín dụng, hãy nghĩ về cùng một thiết kế, nhưng, mỗi "thực thể ông chủ" thực sự được kết nối với một "thực thể BigBoss" lớn hơn được tạo thành từ một cơ thể chính, lõi chính và 3 "Thực thể ông chủ". Điều này sẽ cho tôi thấy một giải pháp cho ít nhất 3 chiều (ông bà-cha mẹ-con) ... là quá đủ cho tôi.