Tôi đang tạo một hệ thống đối tượng trò chơi dựa trên thành phần . Một số lời khuyên:
GameObject
chỉ đơn giản là một danh sáchComponents
.- Có
GameSubsystems
. Ví dụ, kết xuất, vật lý, vv Mỗi cái đềuGameSubsystem
chứa con trỏ đến một sốComponents
.GameSubsystem
là một sự trừu tượng rất mạnh mẽ và linh hoạt: nó đại diện cho bất kỳ lát cắt (hoặc khía cạnh) nào của thế giới trò chơi.
Có một nhu cầu trong một cơ chế đăng ký Components
trong GameSubsystems
(khi GameObject
được tạo ra và sáng tác). Có 4 cách tiếp cận :
- 1: Chuỗi mô hình trách nhiệm . Mỗi
Component
được cung cấp cho mọiGameSubsystem
.GameSubsystem
đưa ra quyết địnhComponents
đăng ký (và cách tổ chức chúng). Ví dụ: GameSubystemRender có thể đăng ký Thành phần kết xuất.
chuyên nghiệp Components
không biết gì về cách chúng được sử dụng. Khớp nối thấp. A. Chúng ta có thể thêm mới GameSubsystem
. Ví dụ: hãy thêm GameSubystemTitle đăng ký tất cả Thành phần và đảm bảo rằng mọi tiêu đề là duy nhất và cung cấp giao diện để truy vấn các đối tượng theo tiêu đề. Tất nhiên, ElementTitle không nên được viết lại hoặc kế thừa trong trường hợp này. B. Chúng ta có thể tổ chức lại hiện có GameSubsystems
. Ví dụ: GameSubystemAudio, GameSubystemRender, GameSubystemParticleEmmiter có thể được hợp nhất vào GameSubystemSpatial (để đặt tất cả âm thanh, trình giả lập, hiển thị Components
trong cùng phân cấp và sử dụng các biến đổi tương đối cha mẹ).
con. Kiểm tra mọi thứ. Rất không hiệu quả.
con. Subsystems
biết về Components
.
- 2: Mỗi
Subsystem
tìm kiếm choComponents
các loại cụ thể.
chuyên nghiệp Hiệu suất tốt hơn trong Approach 1
.
con. Subsystems
vẫn biết về Components
.
- 3:
Component
đăng ký chính nó trongGameSubsystem(s)
. Chúng tôi biết tại thời điểm biên dịch rằng có GameSubystemRenderer, vì vậy, hãy để ElementImageRender sẽ gọi một cái gì đó giống như GameSubystemRenderer :: register (ElementRenderBase *).
chuyên nghiệp Hiệu suất. Không kiểm tra không cần thiết như trong Approach 1
.
con. Components
được kết hợp xấu với GameSubsystems
.
- 4: Mẫu người hòa giải .
GameState
(có chứaGameSubsystems
) có thể thực hiện registerComponent (Thành phần *).
chuyên nghiệp Components
và GameSubystems
không biết gì về nhau.
con. Trong C ++, nó trông giống như kiểu chuyển đổi xấu xí và chậm chạp.
Câu hỏi:
Cách tiếp cận nào tốt hơn và chủ yếu được sử dụng trong thiết kế dựa trên thành phần? Thực hành nói gì? Bất kỳ đề xuất về việc thực hiện Approach 4
?
Cảm ơn bạn.
Components
tại GameObjects
nằm ngoài phạm vi câu hỏi của tôi. Đọc các bài viết về cách tiếp cận dựa trên thành phần hoặc đặt câu hỏi của riêng bạn trên trang web này nếu bạn quan tâm đến nó. Những gì bạn nghĩ GameSubsystem
là hoàn toàn sai.