Tôi còn khá mới với ý tưởng về các hệ thống thực thể, đã đọc rất nhiều thứ (hữu ích nhất, blog tuyệt vời này và câu trả lời này ).
Mặc dù tôi có một chút khó khăn để hiểu làm thế nào một cái gì đó đơn giản như có thể điều khiển vị trí của một đối tượng bằng một số nguồn không xác định.
Đó là, tôi có thực thể của mình, có một thành phần vị trí. Sau đó tôi có một số sự kiện trong trò chơi bảo thực thể này di chuyển một khoảng cách nhất định, trong một thời gian nhất định.
Những sự kiện này có thể xảy ra bất cứ lúc nào và sẽ có các giá trị khác nhau cho vị trí và thời gian. Kết quả là chúng sẽ được ghép lại với nhau.
Trong một giải pháp OO truyền thống, tôi có một loại MoveBy
lớp, chứa khoảng cách / thời gian và một mảng những thứ bên trong lớp đối tượng trò chơi của tôi. Mỗi khung hình, tôi sẽ lặp qua tất cả MoveBy
và áp dụng nó vào vị trí. Nếu a MoveBy
đã đạt đến thời gian kết thúc, loại bỏ nó khỏi mảng.
Với hệ thống thực thể, tôi hơi bối rối khi tôi nên sao chép loại hành vi này.
Nếu chỉ có một trong số chúng tại một thời điểm, thay vì có thể kết hợp chúng lại với nhau, thì nó khá đơn giản (tôi tin) và trông giống như thế này:
PositionComponent
chứa x, y
MoveByComponent
chứa x, y, time
Entity
trong đó có cả a PositionComponent
và aMoveByComponent
MoveBySystem
rằng ngoại hình cho một thực thể với cả các thành phần này, và cho biết thêm giá trị của MoveByComponent
để PositionComponent
. Khi time
đạt được, nó sẽ loại bỏ thành phần khỏi thực thể đó.
Tôi hơi bối rối về cách tôi làm điều tương tự với nhiều lần di chuyển.
Suy nghĩ ban đầu của tôi là tôi sẽ có:
PositionComponent
, MoveByComponent
giống như trên
MoveByCollectionComponent
trong đó có một mảng MoveByComponent
s
MoveByCollectionSystem
tìm kiếm một thực thể có a PositionComponent
và a MoveByCollectionComponent
, lặp qua các MoveByComponent
s bên trong nó, áp dụng / loại bỏ khi cần thiết.
Tôi đoán đây là một vấn đề tổng quát hơn, có nhiều thành phần giống nhau và muốn một hệ thống tương ứng hoạt động trên từng cái. Các thực thể của tôi chứa các thành phần của chúng bên trong hàm băm của loại thành phần -> thành phần, do đó, chỉ có 1 thành phần của một loại cụ thể cho mỗi thực thể.
Đây có phải là cách đúng đắn để được nhìn vào điều này?
Một thực thể chỉ nên có một thành phần của một loại nhất định tại mọi thời điểm?
move x by 10 in 2 seconds
và move x by -10 in 2 seconds
thực thể sẽ đứng yên hoàn toàn?
MoveBy
chức năng chỉ là một vận tốc? Có vẻ như bạn đang đi đúng hướng. Đối với câu hỏi thứ hai của bạn, có rất nhiều triển khai khác nhau của các hệ thống thực thể / thành phần. Một mô tả trong câu trả lời của tôi mà bạn liên kết sẽ chỉ có một thành phần của một loại nhất định.