giải pháp tiêu chuẩn để tìm đường đến mục tiêu đang di chuyển là gì?


28

Tôi đang làm việc trên một RTS 2D như trò chơi, A * cơ bản hoạt động hoàn hảo để di chuyển một đơn vị từ điểm A đến điểm B.

Nhưng bây giờ tôi phải đối mặt với vấn đề tìm đường liên tục, như A tấn công một đối tượng B đang di chuyển, gọi A * ở mỗi khung hình khi vị trí của Đối tượng B thay đổi có vẻ không hiệu quả.

Vậy phương pháp tiêu chuẩn cho vấn đề này là gì?


1
Không có phương pháp tiêu chuẩn.
Kylotan

3
Không có phương pháp tiêu chuẩn duy nhất nhưng có rất nhiều tài liệu về các phương pháp phổ biến để giải quyết vấn đề.

Câu trả lời:


17

Từ những gì tôi biết, bạn có thể xem thuật toán D * viết tắt của "Dynamic A *". Thuật toán này được sử dụng để tính toán tìm đường cho môi trường động, ở đây với một mục tiêu di động.

Đây là một bài báo sử dụng D * để di chuyển tìm đường dẫn mục tiêu: Di chuyển mục tiêu D * Lite


10

Một lựa chọn là chỉ tạo một đường dẫn mới cứ sau vài khung hình. Nếu bạn đã thực hiện một hoặc hai lần một giây thay vì hơn 60 lần một giây thì người dùng sẽ không thể nhận ra trừ khi cả hai đều là hai đối tượng chuyển động rất nhanh


8

Bạn có thể sử dụng phương pháp "đường cong chó" mà chó dường như sử dụng khi săn lùng ai đó. Họ tính toán vị trí của điểm ảnh hưởng sẽ là "trong tương lai" và đặt thẳng đến vị trí đó.

Một cách gần đúng đơn giản có thể là một cái gì đó dọc theo dòng:

A = NPC

B = mục tiêu

T = thời gian để đến vị trí B: s (vị trí ban đầu của B: s)

Tính toán nơi B sẽ ở trong thời gian 'T' (nếu B tiếp tục ở cùng tốc độ / góc) và thay vào đó.

Đây không phải là cách hoàn hảo khi khoảng cách thay đổi nhưng đơn giản hơn nhiều so với việc tạo ra một giải pháp hoàn hảo và tốt hơn nhiều so với việc cố gắng đi đến 'B'.


3
Không biết về chó. Tôi đã học được điều gì hôm nay!
SteeveDroz

3

Đồng ý với Kylotan rằng không có phương pháp chuẩn .

Một phương pháp tôi đã thấy công việc là giả định mục tiêu tiếp tục di chuyển theo cùng một hướng và thay đổi vị trí mục tiêu khi bạn chạy qua thuật toán tìm đường. Điều này không có nghĩa là bạn phải giữ hai số liệu trong các nút A * của mình (chi phí và thời gian chứ không phải chi phí).

Để làm tốt hơn thế là rất khó. Trừ khi bạn thực sự có kiến ​​thức về con đường vững chắc của mục tiêu, bạn sẽ hướng đến vùng đất khá khó khăn bởi vì AI sẽ đoán lần thứ hai hoặc mô phỏng hành vi của mục tiêu để đoán xem chúng sẽ ở đâu và đi về phía đó. Loại AI này là một trò chơi AB thời gian thực từ lý thuyết trò chơi, một lĩnh vực không chuẩn trong bất kỳ bộ công cụ AI trò chơi 3D nào.


2

Một cách để thực hiện tìm đường dẫn động là dự đoán thực thể nơi mục tiêu sẽ đến và đi đến đó.

Một cách để làm điều này là sử dụng một loạt Taylor.

Tôi sẽ gọi đường dẫn của mục tiêu theo thời gian là hàm S (t) trong đó S là vị trí và t là thời gian hiện tại và gần đúng với đường dẫn là A (f) và f là ngày trong tương lai gần đúng .

Khi đó, xấp xỉ đơn giản và ngu ngốc nhất là A (f) = 0.

Đơn giản tiếp theo là A (f) = S (t) trong đó t là thời gian hiện tại và f là tương lai. Đây là dự đoán mục tiêu chỉ đơn giản là dừng tại chỗ.

Đơn giản thứ ba là A (f) = S '(t) * f + S (t) trong đó S' là đạo hàm của S liên quan đến thời gian. Đây là dự đoán mục tiêu tiếp tục ở tốc độ không đổi mà không tăng tốc.

Đơn giản thứ tư là A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t). Đây là dự đoán mục tiêu đang tăng tốc với tốc độ không đổi như một quả bóng rơi.

Tôi biết điều này có thể được đánh giá lại về sự thay đổi trong thời gian có lẽ thuận tiện hơn cho một trò chơi. Bây giờ S có thể là bất cứ điều gì. Nó có thể là tọa độ X, nó có thể là tọa độ Y, nó có thể là khoảng cách giữa các vật thể, nó có thể là một góc. Ngoài ra, có thể có các phương pháp tốt hơn để dự đoán đường đi trong tương lai của một đối tượng để tôi nhìn xung quanh một chút.


1

Nếu địa hình mở hợp lý và mục tiêu không quá xa người theo đuổi, thì bạn có thể sử dụng hành vi đánh chặn. Về cơ bản, bạn lấy vị trí và vận tốc của mục tiêu để tính toán một vị trí phía trước mục tiêu không quá xa, và không quá gần, và bạn điều khiển người theo đuổi về điểm đó (tính toán từng khoảng thời gian đều đặn).

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.