Đường dẫn: Lưới điều hướng dựa trên gạch


8

Tôi đang phát triển một RTS dựa trên gạch thời gian thực. Đây là một bản đồ ví dụ:

Bản đồ

Bản đồ này bao gồm 4 vùng với 256 ô mỗi. Gạch màu xanh đại diện cho những trở ngại. Các đơn vị có thể di chuyển theo tám hướng tiêu chuẩn. Các đơn vị được ràng buộc với gạch; một gạch có thể chứa một đơn vị.

Đây là một số ví dụ về những con đường lý tưởng mà tôi đang tìm kiếm. Công cụ A * điển hình:

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

Câu hỏi của tôi là: Lưới điều hướng có áp dụng cho RTS dựa trên gạch không? Tôi chỉ thấy các bản đồ điều hướng được sử dụng trong các trò chơi trong đó các đơn vị di chuyển tự do và không bị ràng buộc với một lưới các ô. Lưới điều hướng sẽ trông như thế nào trên bản đồ cụ thể này? Một hình ảnh ví dụ sẽ là tuyệt vời.


Đối với những gì đáng giá, tôi dường như nhớ lại khi nghe rằng một số "sự kỳ quặc" của Starcraft tôi là do quyết định muộn chuyển từ 2d sang 3d isometric - tất cả các mã đường dẫn được viết đều mong đợi địa hình 2d!
Raven Dreamer

Câu trả lời:


10

Có, lưới điều hướng vẫn có thể áp dụng cho các trò chơi xếp gạch. Mặc dù, chúng chủ yếu sẽ được sử dụng như một tối ưu hóa. Ví dụ: tôi đã chuyển đổi phía dưới bên trái hình ảnh của bạn để sử dụng lưới điều hướng:

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

Trong trường hợp này, mỗi ô vuông màu xanh lá cây sẽ là một nút điều hướng. Như bạn có thể thấy, điều này làm giảm đáng kể số lượng nút mà A * cần xử lý. Các đơn vị sau đó có thể chỉ cần đường dẫn đến trung tâm của mỗi nút này.

Việc tạo ra các nút này là một vấn đề khác nhau. Nó có thể phức tạp quyết định làm thế nào để hình thành các nút. Có một vài câu hỏi trên trang web nơi bạn có thể tìm thấy một số ý tưởng về cách bạn muốn thực hiện điều đó:

Chia một đa giác thành các hộp có kích thước khác nhau

Xác định các mẫu hình tứ giác trong một mảng hai chiều

/programming/20220215/minimum-number-of-ripseles-in-shape-ADE-from-r chữ nhật

Lưới điều hướng này về cơ bản cũng có thể được sử dụng như một tìm kiếm đường dẫn "vượt qua đầu tiên". Nếu một đường dẫn được tìm thấy thông qua lưới điều hướng, bạn biết rằng một đường dẫn tồn tại. Đây là một thử nghiệm nhanh hơn để xem nếu hai điểm được kết nối.


1
Tôi đang có một thời gian khó hiểu làm thế nào điều này là vượt trội so với A * thuần túy. Làm thế nào để navmesh của bạn tối ưu hóa tính toán tìm đường cho đường dẫn màu xanh lá cây trong câu trả lời ban đầu, ví dụ?
mario_sunny

4
Đường dẫn màu xanh lá cây có 15 nút, đường dẫn lưới có 5. Điều này thậm chí không bao gồm số lượng ngõ cụt cần được phân tích khi tìm thấy đường dẫn đó. Điểm của lưới điều hướng không nhất thiết phải thực hiện các tuyến trực tiếp nhất, đó là giảm số lượng nút mà A * phải tìm kiếm, do đó làm tăng đáng kể tốc độ của A *. Có các chiến lược để đặt các nút trong lưới điều hướng của bạn có thể tìm thấy sự cân bằng giữa các đường dẫn trực tiếp và ít nút hơn (ví dụ: các nút trên mỗi góc của tất cả các chướng ngại vật). Cũng có tối ưu hóa có thể được thực hiện trên đường dẫn hoàn thành.
MichaelHouse

Tôi đang bắt đầu hiểu. Con đường màu xanh lá cây trông có khác gì với tối ưu hóa navmesh không? Bạn dường như đang ám chỉ rằng đơn vị sẽ di chuyển đến trung tâm của mỗi hình chữ nhật trên đường đến điểm cuối. Bạn đang đề xuất tối ưu hóa sau A * sẽ rút ngắn đường dẫn?
mario_sunny

3
Có, nếu bạn đã sử dụng trung tâm của mỗi nút, đường dẫn sẽ khác nhau. Tuy nhiên, bạn có thể quyết định sử dụng một cái gì đó ngoài trung tâm (như bạn có thể sử dụng các góc của mỗi nút). Hoặc bạn có thể làm cho nó để các nút của bạn không lớn hơn bốn hình vuông (tạo ra ít nút hơn nhưng làm cho các nút theo hình học gần hơn). Hoặc bạn có thể thực hiện một số tối ưu hóa trên đường dẫn để trực tiếp hơn sau khi bạn tìm thấy nó. Bạn thậm chí có thể sử dụng lưới điều hướng như một đường chuyền đầu tiên, sau đó sử dụng A * để dẫn qua từng nút (cho phép bạn "đường dẫn khi bạn đi", trong khi thiết bị đang di chuyển, lan rộng tác động hiệu suất theo thời gian).
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.