Tôi đang cố gắng thiết kế một hệ thống thực thể dựa trên thành phần cho mục đích học tập (và sau này sử dụng trên một số trò chơi) và tôi gặp một số rắc rối khi cập nhật trạng thái thực thể.
Tôi không muốn có một phương thức update () bên trong Thành phần để ngăn chặn sự phụ thuộc giữa các Thành phần.
Những gì tôi hiện đang nghĩ là các thành phần giữ dữ liệu và các thành phần cập nhật hệ thống.
Vì vậy, nếu tôi có một trò chơi 2D đơn giản với một số thực thể (ví dụ: người chơi, kẻ thù1, kẻ thù2) có các thành phần Biến đổi, Chuyển động, Trạng thái, Hoạt hình và Kết xuất, tôi nghĩ rằng tôi nên có:
- Một MovementSystem di chuyển tất cả các thành phần Movement và cập nhật các thành phần State
- Và một Hệ thống kết xuất cập nhật các thành phần Hoạt hình (thành phần hoạt hình nên có một hoạt hình (nghĩa là một bộ khung / kết cấu) cho mỗi trạng thái và cập nhật nó có nghĩa là chọn hoạt hình tương ứng với trạng thái hiện tại (ví dụ: jump, move_left, v.v.) và cập nhật chỉ số khung). Sau đó, RenderSystem cập nhật các thành phần Kết xuất với kết cấu tương ứng với khung hiện tại của Hoạt hình của mỗi thực thể và hiển thị mọi thứ trên màn hình.
Tôi đã thấy một số triển khai như khung Artemis, nhưng tôi không biết làm thế nào để giải quyết tình huống này:
Hãy nói rằng trò chơi của tôi có các thực thể sau đây. Mỗi thực thể có một tập hợp các trạng thái và một hình động cho mỗi trạng thái:
- người chơi: "nhàn rỗi", "di chuyển_right", "nhảy"
- kẻ thù1: "di chuyển_up", "di chuyển_down"
- địch2: "di chuyển_left", "di chuyển_right"
Các cách tiếp cận được chấp nhận nhất để cập nhật trạng thái hiện tại của mỗi thực thể là gì? Điều duy nhất tôi có thể nghĩ đến là có các hệ thống riêng biệt cho từng nhóm thực thể và các thành phần Bang và Hoạt hình riêng biệt để tôi có PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... nhưng tôi nghĩ đây là một điều xấu giải pháp và phá vỡ mục đích của việc có một hệ thống dựa trên thành phần.
Như bạn có thể thấy, tôi khá lạc lõng ở đây, vì vậy tôi rất trân trọng bất kỳ sự giúp đỡ nào.
EDIT: Tôi nghĩ rằng giải pháp để thực hiện công việc này như tôi dự định là giải pháp này:
Bạn tạo ra chung chung và hoạt hình chung đủ để được sử dụng cho tất cả các thực thể. Dữ liệu họ chứa sẽ là công cụ sửa đổi để thay đổi những thứ như hoạt hình nào được phát hoặc trạng thái nào khả dụng. - Byte56
Bây giờ, tôi đang cố gắng tìm ra cách thiết kế 2 thành phần này đủ chung để tôi có thể sử dụng lại chúng. Có thể có một UID cho mỗi trạng thái (ví dụ: đi bộ, chạy ...) và lưu trữ hình ảnh động trong bản đồ vào AnimationComponent được khóa bởi mã định danh này là một giải pháp tốt?
statecomponent
và animationcomponent
đủ chung chung để được sử dụng cho tất cả các thực thể. Dữ liệu họ chứa sẽ là công cụ sửa đổi để thay đổi những thứ như hoạt hình nào được phát hoặc trạng thái nào khả dụng.