Khiên có nên là thực thể riêng của nó theo dõi vị trí của người chơi không? Điều đó có thể làm cho nó khó thực hiện việc lọc thiệt hại. Nó cũng làm mờ các dòng giữa các thành phần và thực thể đính kèm.
Chỉnh sửa: Tôi nghĩ rằng không có đủ "hành vi tự trị" cho một thực thể tách biệt. Trong trường hợp cụ thể này, một lá chắn đi theo mục tiêu, hoạt động cho mục tiêu và không tồn tại lâu hơn mục tiêu. Mặc dù tôi có xu hướng đồng ý rằng không có gì sai với khái niệm "đối tượng lá chắn", nhưng trong trường hợp này chúng ta đang xử lý hành vi, điều này chỉ phù hợp với một thành phần. Nhưng tôi cũng là người ủng hộ các thực thể logic thuần túy (trái ngược với các hệ thống thực thể toàn diện, trong đó bạn có thể tìm thấy các thành phần Biến đổi và Kết xuất).
Khiên có nên là một thành phần chứa các thành phần khác không? Tôi chưa bao giờ thấy hoặc nghe thấy bất cứ điều gì như thế này, nhưng có lẽ nó phổ biến và tôi chưa đủ sâu.
Nhìn nó ở một góc nhìn khác; thêm một thành phần cũng thêm các thành phần khác, và sau khi loại bỏ, các thành phần bổ sung cũng biến mất.
Khiên chỉ nên là một bộ các thành phần được thêm vào người chơi? Có thể với một thành phần bổ sung để quản lý các thành phần khác, ví dụ như vậy tất cả chúng có thể được xóa thành một nhóm. (vô tình để lại phía sau thành phần giảm thiệt hại, bây giờ sẽ rất vui).
Đây có thể là một giải pháp, nó sẽ thúc đẩy việc tái sử dụng, tuy nhiên nó cũng dễ bị lỗi hơn (ví dụ như đối với vấn đề bạn đã đề cập). Nó không hẳn là xấu. Bạn có thể tìm ra các kết hợp chính tả mới với bản dùng thử và lỗi :)
Một cái gì đó khác rõ ràng với một người có nhiều kinh nghiệm thành phần?
Tôi sẽ giải thích một chút.
Tôi tin rằng bạn nhận thấy một số thành phần nên được ưu tiên như thế nào khi chúng được thêm vào một thực thể (điều này cũng sẽ trả lời câu hỏi khác của bạn).
Tôi cũng sẽ giả định rằng chúng tôi đang sử dụng giao tiếp dựa trên tin nhắn (vì mục đích thảo luận, đây chỉ là một sự trừu tượng đối với một cuộc gọi phương thức trong thời điểm này).
Bất cứ khi nào một thành phần khiên được "cài đặt", các trình xử lý thông báo thành phần khiên sẽ được nối với một thứ tự cụ thể (cao hơn).
Handler Stage Handler Level Handler Priority
In Pre System High
Out Invariant High
Post AboveNormal
Normal
BelowNormal
Low
System Low
In - incoming messages
Out - outgoing messages
Index = ((int)Level | (int)Priority)
Thành phần "thống kê" cài đặt trình xử lý thông báo "thiệt hại" ở chỉ mục In / Invariant / Normal. Mỗi khi nhận được thông báo "thiệt hại", hãy giảm HP theo lượng "giá trị" của nó.
Hành vi tiêu chuẩn khá (đưa vào một số khả năng chống sát thương tự nhiên và / hoặc đặc điểm chủng tộc, bất cứ điều gì).
Thành phần lá chắn cài đặt trình xử lý thông báo "thiệt hại" ở chỉ số In / Pre / High.
Every time a "damage" message is received, deplete the shield energy and substract
the shield energy from the damage value, so that the damage down the message
handler pipeline is reduced.
damage -> stats
stats
stats.hp -= damage.value
damage -> shield -> stats
shield
if(shield.energy) {
remove_me();
return;
}
damage.value -= shield.energyquantum
shield.energy -= shield.energyquantum;
stats
stats.hp -= damage.value
Bạn có thể thấy điều này khá linh hoạt, mặc dù nó sẽ yêu cầu lập kế hoạch cẩn thận khi thiết kế tương tác thành phần, vì bạn sẽ phải xác định phần nào của trình xử lý sự kiện thông báo thành phần xử lý thông báo được cài đặt.
Có ý nghĩa? Hãy cho tôi biết nếu tôi có thể thêm chi tiết.
Chỉnh sửa: liên quan đến nhiều trường hợp thành phần (hai thành phần áo giáp). Bạn có thể theo dõi tổng số thể hiện chỉ trong một thể hiện thực thể (tuy nhiên, trạng thái này sẽ giết chết từng thành phần) và chỉ cần tiếp tục thêm các trình xử lý sự kiện thông báo hoặc đảm bảo các bộ chứa thành phần của bạn cho phép các loại thành phần trùng lặp trước.