Cây hành vi :: Những hành động mất nhiều thời gian hơn một lần


19

Từ những gì tôi hiểu về Cây hành vi, mỗi Hành vi nên là một Hành động hướng đến mục tiêu ngắn có thể được thực hiện trong một vài lần lặp.

Vì vậy, ví dụ, bên dưới là hình ảnh của Cây Hành vi:

nhập mô tả hình ảnh ở đây

Bây giờ chúng ta hãy giả sử rằng hành vi Drive To Enemy mất nhiều hơn một vài lần lặp trong cây. Vì vậy, trên mỗi lần vượt qua, Drive To Enemy được gọi vì hiện đang ở trạng thái chạy .

Vấn đề là tôi muốn gọi Evade Enemy nếu có Enemy ở gần. Và xem xét rằng Drive To Enemy luôn được gọi là tôi không bao giờ có cơ hội gọi Evade Enemy ( Có lẽ nên được gọi là Tránh kẻ thù ).

  • Tôi có nên vượt qua Tree EACH không cho dù Hành động nào đang chạy?
  • Tôi đang đi về điều này đúng cách?
  • Cách thích hợp để xử lý một hành vi như vậy là gì?

Ban đầu hỏi về Stackoverflow. Thiết nghĩ ở đây sẽ là một nơi thích hợp hơn để đặt câu hỏi này.


1
Câu trả lời được cung cấp ở đây có giúp ích không? gamedev.stackexchange.com/questions/51693/ từ
Tetrad 25/03/13

Đó cũng là câu hỏi của tôi. Tôi sẽ đăng câu hỏi này như một bình luận nhưng nghĩ rằng nó nên là một câu hỏi riêng biệt.
Lancer miễn phí

Câu trả lời:


16

Xem hình ảnh tôi cung cấp trong câu trả lời trước của tôi :

nhập mô tả hình ảnh ở đây

Nếu bạn tưởng tượng nút 1 là 'Evade Enemy' và nút 2 là 'Chase Enemy', bạn sẽ thấy điều đó mặc dù trong lần lặp thứ hai (khi mọi thứ đều có màu xanh trừ '2' và 'B' là khi lần lặp thứ hai bắt đầu), 'Evade Enemy' vẫn được kiểm tra trước. Chỉ khi 'Evade Enemy' thất bại, bởi vì không có kẻ thù nào ở gần, 'Chase Enemy' mới được kích hoạt trở lại. Khi 'Truy tìm kẻ thù' được truy cập lại, nó thông báo rằng nó ở trạng thái 'đang chạy' và bỏ qua trực tiếp đến 'B'.

Điều này có nghĩa là mỗi khi cây được kiểm tra, nó sẽ luôn đi qua trái sang phải. Ngay cả khi một nút được đánh dấu là đang chạy, các nút ưu tiên cao hơn vẫn được kiểm tra trước.

Tôi không chắc liệu bạn có ý định xử lý các nút của bạn từ phải sang trái hay không, nhưng đó là cách bạn dường như sắp xếp chúng (nghĩa là dưới sự trốn tránh kẻ thù, xác định vị trí của kẻ địch ở bên phải ổ đĩa theo hướng ngược lại). Nếu bạn cần giải thích thêm, bạn nên hỏi trong trò chuyện hoặc trong một trong những câu hỏi hiện có của bạn về chủ đề này.


2
Cảm ơn cho một lời giải thích tuyệt vời. Tôi đã có một thời gian khó khăn để hiểu bản chất đệ quy của Cây Hành vi. Tôi sẽ hỏi bạn trong phần bình luận của câu hỏi cuối cùng nhưng không muốn biến các bình luận thành một QA dài. Một câu hỏi cuối cùng, bây giờ tất cả đều có ý nghĩa. Có sự khác biệt giữa Bộ chọn và Trình tự khi xử lý trạng thái Chạy không? Có vẻ như Bộ chọn (Nút 0) đã kiểm tra Nút 1 trước, trong khi chuỗi "Nút 2" không kiểm tra Nút A, trên lần lặp thứ hai.
Lancer miễn phí

4
Câu hỏi hay, tôi nghĩ bạn đang nhận được nó. Nút 2 không kiểm tra nút A vì nút A đã hoàn thành. Khi nút 2 được đánh dấu là 'Đang chạy', nó lưu ý rằng nút B là nút hiện đang chạy. Bạn có thể giả sử rằng nếu một nút đang chạy, điều đó có nghĩa là các nút trước đó không cần phải kiểm tra lại.
MichaelHouse

Bạn có đặt lại Bộ chọn gốc (0), thành "SYN SÀNG" sau khi được đặt thành "CHẠY" sau lần lặp đầu tiên không?
Lancer miễn phí

Tôi tin rằng chỉ có cha mẹ của nút đang chạy được thiết lập để chạy. Root cần được thiết lập để sẵn sàng thay vì chạy vì chúng ta cần phân tích lại nút (1).
MichaelHouse

3
Đó là một lựa chọn. Bạn thực sự có thể cập nhật nó thường xuyên hoặc không thường xuyên như bạn muốn. Cứ sau 300 ms nếu bạn muốn, hoặc mọi khung hình. Hoặc bạn có thể có một bản cập nhật cố định cũng như một bản cập nhật được kích hoạt để đối phó với bất kỳ sự kiện nào. Cây hành vi, như với hầu hết các cấu trúc như thế này, không được xác định nghiêm ngặt. Chúng nên được sử dụng theo cách tốt nhất có thể cho trò chơi của bạn. Nếu đánh giá nó, mọi khung hình đều quá lãng phí, vậy thì đừng làm vậy. Bạn cũng có thể giới hạn thời gian dành cho việc đánh giá một cây và chọn khung hình tiếp theo nếu bạn muốn. Có rất nhiều lựa chọn.
MichaelHouse
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.