Kỹ thuật cắt góc (theo nghĩa đen) trên bản đồ lưới vuông


7

Trò chơi của tôi liên quan đến một cấp độ với địa hình có thể biến dạng và các đơn vị có thể di chuyển theo bất kỳ hướng nào nhưng bị làm chậm bởi địa hình không bằng phẳng. Ngôi sao A bình thường sẽ hoạt động tốt trong hầu hết các trường hợp, ngoại trừ trên vùng đất bằng phẳng, cho dù máy tìm mục đích chung hoạt động như thế nào, nó sẽ không gửi các đơn vị trên đường đi trực tiếp. Ngôi sao Theta sẽ hoạt động nếu toàn bộ cấp độ khá bằng phẳng, nhưng sẽ chậm hơn nhiều nếu ban đầu phải tính đến địa hình không bằng phẳng.

Tôi nghĩ rằng thuật toán A-star cơ sở ở Manhattan sẽ nhanh và đưa ra gợi ý đủ tốt để cho phép các thuật toán tìm hoặc điều khiển đường khác tiếp quản, nhưng tôi không chắc nên sử dụng loại thuật toán nào để nhìn về phía trước và quyết định khi nào từ bỏ con đường, đi một con đường trực tiếp hơn và nơi để quay trở lại con đường sau.

(Ngôi sao Theta có vẻ như sẽ quá kém hiệu quả nếu được điều chỉnh để đưa những thứ như dốc, chướng ngại vật hoặc đường vào tài khoản. Xem giải pháp được đề xuất cho nhận xét về việc tránh các bãi mìn tại: http://aigamedev.com/open/ hướng dẫn / theta-star-any-angle-path / )

Chỉnh sửa: Tôi không đề cập rằng tôi đã triển khai và thử nghiệm sao A trên lưới tương tự. (Tôi nghĩ rằng tôi đã vô tình xóa một cái gì đó trong câu hỏi này.) Một số hàm chi phí / heuristic rõ ràng hơn mà tôi cho rằng không dẫn đến các đường dẫn thực tế trên lưới khi một chướng ngại vật chặn đường đi trực tiếp nhất (về cơ bản khi tìm đường là hữu ích ) ( ví dụ hình ảnh ). Việc thay đổi hàm chi phí được sử dụng bởi thuật toán ngôi sao Theta có vẻ như là một giải pháp lý tưởng (xem xét sự hạn chế của việc sử dụng lưới), nhưng nó đưa ra giả định rằng gạch có cùng chi phí di chuyển (và mất nhiều thời gian hơn).

Lý do ban đầu của tôi đằng sau việc sử dụng khoảng cách Manhattan là thuê ngoài thuật toán "cắt góc" từ thuật toán tìm đường, vì điều quan trọng hơn là phải có thuật toán tìm đường nhanh trong trường hợp bố cục chướng ngại vật hoặc địa hình thay đổi. Sẽ có ý nghĩa hơn khi thực hiện thuật toán "cắt góc" một lần khi đơn vị đến hơn mọi hoán vị của mọi tìm kiếm thuật toán tìm đường (kết quả cuối cùng có thể bị loại bỏ.) Một tìm kiếm bốn hàng xóm với khoảng cách Manhattan cũng thú vị bởi vì bạn có thể thấy các hộp của các đường dẫn thay thế và xác định các tam giác vuông được hình thành bởi đường dẫn ban đầu và đường dẫn ngắn nhất.

Một câu hỏi tốt hơn sẽ là "Cách nhanh nhất để xác định các phím tắt trong một đường dẫn với góc quay 90 độ là gì?"


2
Bạn có thể sửa đổi chi phí giữa các ô tùy thuộc vào độ dốc / vv .. Tại sao bạn không làm đơn giản như vậy?
Kromster

1
Bạn có thể muốn nhìn vào làm mịn đường dẫn . Đây là một bài viết thú vị trên gamasutra.
bummzack

Câu trả lời:


4

Bạn đã cho A * một cơ hội chưa? Với điều kiện bạn cân nhắc chi phí của mình cho các loại địa hình khác nhau một cách phù hợp, nó sẽ tìm ra một con đường tốt nhất với các nút có sẵn. Tuy nhiên, nó sẽ không tìm thấy một đường thẳng trên các đồng bằng mở nếu bạn cho nó một lưới vuông, dường như đó là vấn đề của bạn với nó.

Nếu bạn muốn có thể tạo các đường thẳng trên các đồng bằng, bạn có thể thu gọn các cạnh của đường dẫn thành các đoạn bất cứ nơi nào đường dẫn mới có giá bằng hoặc thấp hơn (IE cùng hoặc ít hơn khoảng cách và không đi qua địa hình khó khăn hơn.) Chỉ cần lấy mỗi hai cặp nút trong đường dẫn (AB và BC) và xem AC có phải là tuyến tốt hơn không. Nếu AC bằng hoặc ít hơn chi phí, loại bỏ B khỏi danh sách. Lặp lại danh sách cho đến khi lặp lại trong đó danh sách không thay đổi nữa và điều đó sẽ giải quyết vấn đề đồng bằng của bạn. Bạn phải thực hiện một số xử lý bổ sung để đảm bảo rằng AC là một bước đi hợp pháp và để tính chi phí trên một khoảng cách tùy ý. Hoặc, bạn có thể yêu cầu các đơn vị của mình sử dụng đường dẫn làm hướng dẫn chung và di chuyển về phía nút một số vị trí của chúng, sử dụng tránh chướng ngại vật đơn giản cùng một lúc.

Bạn cũng có thể cải thiện đáng kể chất lượng đường dẫn của mình bằng cách cung cấp cho A * nhiều tùy chọn hơn để các nút đi qua. Chẳng hạn, chỉ cần thêm các đường chéo với chi phí ax√2 sẽ tạo ra đường dẫn tốt hơn nhiều so với đường ngang 4 hướng đơn giản.

Tôi không chắc chắn nên sử dụng loại thuật toán nào để nhìn về phía trước và quyết định khi nào nên từ bỏ đường dẫn, đi tuyến đường trực tiếp hơn và nơi để quay trở lại đường dẫn sau.

A * xử lý việc này rồi. Ngay khi nút hiện đang được khám phá không còn là chi phí thấp nhất + heuristic, nó sẽ chuyển sang nút chi phí thấp nhất + heuristic.

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.