tìm đường với những chướng ngại vật trong trò chơi Warcraft 3


10

Xem xét A * tìm kiếm trên bản đồ dựa trên gạch. Một mã chuyển tiếp thẳng sẽ là: Nếu có một đơn vị bên trong ô đó, thì nó không thể truy cập được, điều này là ổn.

Nhưng có vấn đề giải quyết bản đồ. Khi tôi nhìn vào Warcraft 3, có những con quái vật và cấu trúc có bán kính khác nhau, và bạn có thể đi rất gần, giống như dựa trên vector, điều này được thực hiện như thế nào?

Ngoài ra, giải pháp tiêu chuẩn để kết hợp phát hiện va chạm di chuyển chướng ngại vật với thuật toán tìm đường, như Warcraft 3 là gì?


"Dựa trên vector" có nghĩa là gì?
jcora

Câu trả lời:


7

Tôi không thể nói chắc chắn cách tiếp cận nào được sử dụng bởi các nhà phát triển WC3, nhưng nó trông khá giống với Phân cấp A * được chú thích A *. Bán kính đơn vị được xác định trong WC3Editor đã được sử dụng cho quy mô mô hình 3d, nhưng kích thước đơn vị thực tế cho quá trình tìm đường là rời rạc, có thể giống như unitSize = (int) (unitRadius / 10). Đó không phải là dựa trên vector, đó là điều chắc chắn.

Giả sử có rất nhiều nút đường dẫn tạo lưới nút có độ phân giải cao. Đơn vị đơn giản như một con ma cà rồng có kích thước là 2, vì vậy để đặt nó ở đâu đó trong lưới, chúng ta cần 4 nút đường dẫn miễn phí gần nhau. Một anh hùng hiệp sĩ tử thần lớn hơn một chút với kích thước 3, chiếm tổng cộng 9 nút đường dẫn. Bây giờ chúng tôi đặt 2 ziggurats với nhau để lại một khoảng trống rộng 2 nút ở giữa, và gửi một con ma cà rồng và một hiệp sĩ tử thần ở phía bên kia. Ghoul sẽ có thể vượt qua giữa hai ziggurats, trong khi hiệp sĩ tử thần sẽ phải di chuyển xung quanh. Làm thế nào nó có thể được xác định?

Để xem liệu một nút có thể chứa một đơn vị kích thước cụ thể hay không, hãy chỉ định một giá trị giải phóng mặt bằng đặc biệt cho mỗi nút xác định kích thước đơn vị tối đa được phép. Về cơ bản, điều đó có nghĩa là một số kiểm tra giới hạn đã được thực hiện cho một nút và giới hạn lớn nhất có thể được ghi nhớ là giải phóng mặt bằng của nút. Vì vậy, khi chúng ta muốn đặt một hiệp sĩ tử thần trên một số nút, việc này trở nên đơn giản như so sánh độ thanh thải của nút với kích thước của hiệp sĩ tử thần. Tất nhiên, mọi thứ sẽ trở nên phức tạp hơn nhiều khi có một số đơn vị nhảy xung quanh cạnh tranh cho các nút, nhưng đó là một câu chuyện khác.

Để biết thêm chi tiết, bạn có thể muốn xem bài viết này:

http://harablog.wordpress.com/2009/01/29/clurdy-basing-pathfinding/


4

Nó sẽ sử dụng tessname để tạo các lưới điều hướng AKA. Bài viết này giải thích khái niệm với sơ đồ đầy đủ.

Bạn vẫn có thể duy trì A * như cách tiếp cận tìm đường, tuy nhiên, mạng của bạn không còn là lưới (biểu đồ 4 kết nối), mà là biểu đồ biểu thị kết nối tùy ý giữa các vùng đa giác của bạn. Vì vậy, bạn sẽ phải điều chỉnh thuật toán của mình cho phù hợp.

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.