Tóm tắt trạng thái hoạt hình của hệ thống thực thể


8

Gần đây tôi đã bắt đầu thiết kế một Game Engine bằng cách sử dụng mô hình Entity System, tức là có các thực thể như một tập hợp các thành phần và các hệ thống thực hiện trò chơi thực tế. Trong khi tôi gặp khó khăn ở nhiều khía cạnh khác nhau, điều tôi quan tâm nhất là sự trừu tượng / mô đun hóa của các Thành phần / Hệ thống khác nhau. Cụ thể, giả sử tôi Playercó một số trạng thái hoạt hình, ví dụ. Walking, Sleeping, Jumping, Và một loại Opponentthực thể có một số (không nhất thiết phải giống nhau) tiểu bang là tốt, ví dụ. Walking, HidingVv

Tôi nên thiết kế động cơ như thế nào để nó xử lý các trạng thái (hoạt hình) khác nhau của từng loại thực thể? Nên có hệ thống hoạt hình khác nhau cho từng loại Thực thể? Tôi có nên sử dụng các cờ báo hiệu Hệ thống hoạt hình để hiển thị đúng thực thể không? Ngoài ra, tôi có thể tránh sử dụng enum "mã hóa cứng" cho các tư thế khác nhau không? Tôi có thể thấy rằng một hệ thống kịch bản có thể có thể giúp đỡ, nhưng tôi gần như chắc chắn có một giải pháp đơn giản hơn.

Câu trả lời:


4

Không cho các hệ thống khác nhau cho từng loại, điều đó cắt giảm sự phân chia trách nhiệm quá tốt.

Đây là những gì tôi đang làm trong dự án cá nhân hiện tại của mình:

Có nhiều cách để xử lý trạng thái nhưng có lẽ bạn cần một cách có ý nghĩa với con người, hoặc ít nhất là một cầu nối giữa con người và mã. Bạn phải nghĩ hệ thống hoạt hình như một máy xay sinh tố lớn thay vì một trong những trạng thái riêng biệt, ví dụ bạn đi từ nhàn rỗi sang đi bộ chậm bằng cách thêm 50% đi bộ vào hệ thống và sau đó thêm 100% chạy.

Bên ngoài hệ thống hoạt hình, bạn có thể sử dụng các chuỗi để làm việc với hệ thống dễ dàng và dễ dàng để các tập lệnh và mã giống nhau. Nội bộ với hệ thống bạn xây dựng ánh xạ giữa chuỗi đó và dữ liệu hoạt hình , điều này có thể được thực hiện với kho lưu trữ khóa-giá trị như hàm băm (để tránh hoàn toàn bằng cách tạo dữ liệu hoạt hình lưu trữ) hoặc bằng chuỗi-to-enum tra cứu nếu bạn thích làm việc theo cách đó. Đó là tất cả vấn đề của hương vị tại thời điểm đó. Tôi thích khóa-giá trị vì nó có thể hoàn toàn là dữ liệu được điều khiển từ các tệp XML hoặc INI.

Để xử lý các loại khác nhau, bạn có thể, ở lớp hệ thống, cho phép tạo các bộ ánh xạ hoạt hình để đặt cho "minion" và "run" cho "minion" khác với cài đặt cho "run" và "player player" kiểu.

Tóm lại: hệ thống hoạt hình là chung chung và bạn chỉ có một hệ thống; thế giới bên ngoài cần một giao diện thân thiện; thế giới bên trong cần ánh xạ các trạng thái chung thành các loại thực thể.

Và danh sách những điều tôi muốn làm nhưng chưa phù hợp với thiết kế của tôi:

TODO : tự động ánh xạ tốc độ di chuyển sang loại hoạt hình để thay vì chương trình chính biết về "đi bộ" so với "chạy", hệ thống hoạt hình có thể chuyển đổi "di chuyển ở tốc độ x" thành hoạt hình phù hợp.

TODO : phân chia hình ảnh động như theo dõi đầu và thân một cách minh bạch.

TODO : hình ảnh động phản ứng (như bị đấm vào mặt) được xử lý bởi hệ thống chứ không phải chương trình chính.


Vì vậy, bạn đề nghị sử dụng một vài iftrong số các hệ thống hoạt hình; Trước đây tôi đã hoài nghi về việc sử dụng từ điển của các chuỗi (trong C ++), bộ nhớ khôn ngoan. Đọc hôm nay về hashtables, tôi thấy câu trả lời của bạn đủ đơn giản. Về phần 'máy xay sinh tố': "Thêm 50% đi bộ" có nghĩa là thay thế một số khung hình bằng các khung 'đi bộ' với 50% thời gian không?
petermer

Trộn là một thuật ngữ khá phổ biến trong hoạt hình, nó có nghĩa đen là bạn pha trộn hai (hoặc nhiều) hoạt ảnh cơ bản với nhau để có được đầu ra cuối cùng. Trong ví dụ 50%, tôi giả sử pha trộn 50% "Nhàn rỗi" và 50% "Đi bộ" sẽ tạo ra một nửa chiều đi bộ tốc độ. Bằng cách này, bạn có thể liên tục thay đổi chuyển động từ "Nhàn rỗi" sang "Đi bộ" và sau đó "Chạy". Pha trộn sau này sẽ cho phép bạn thực hiện những việc như có phần thân dưới chạy trong khi phần thân trên đang bắn súng hoặc vẫy tay với ai đó, v.v ... Nếu công cụ hoạt hình của bạn không hỗ trợ pha trộn, hãy sử dụng cách này để suy nghĩ về nó và không phải là một quy tắc.
Patrick Hughes

1
FYI: lo lắng về bộ nhớ cho các chuỗi trong chương trình của bạn trong giai đoạn này là lãng phí thời gian, đó gọi là "tối ưu hóa sớm" và nói chung là một ý tưởng tồi. Sau này, nếu các chuỗi thực sự gây ra tải trọng lớn, chúng có thể được chuyển thành các số CRC ngắn để thu nhỏ tất cả chúng, với chi phí dễ dàng gỡ lỗi và thêm một bước cho quy trình xây dựng của bạn.
Patrick Hughes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.