2012-04-12 43 views
5

Tôi đang cố tạo trò chơi phòng thủ tháp bằng Javascript.Dọn dẹp hàng loạt astar

Đó là tất cả tiến triển tốt ngoài pathfinding ..

Tôi đang sử dụng mã ASTAR từ trang web này: http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript trong đó sử dụng một đống nhị phân (mà tôi tin là khá tối ưu)

Vấn đề tôi có là tôi muốn cho phép mọi người chặn đường dẫn của "kẻ tấn công". Điều này có nghĩa là mỗi "kẻ tấn công" cần có khả năng tự tìm đường thoát (vì ai đó có thể chỉ cắt đứt một "kẻ tấn công" đơn lẻ và nó sẽ cần phải tìm đường thoát riêng). Bây giờ 5/6 kẻ tấn công có thể pathfind tại bất kỳ một thời gian không có vấn đề. Nhưng nói rằng con đường bị chặn cho 10 + kẻ tấn công, tất cả 10 người trong số họ sẽ cần phải bắn tập lệnh pathfinding của nó cùng một lúc mà chỉ cần giảm FPS đến khoảng 1/2 mỗi giây.

Đây phải là một vấn đề thường gặp đối với bất kỳ ai có nhiều thực thể xâm nhập vào bất cứ lúc nào, vì vậy tôi tưởng tượng phải có cách tốt hơn cách tiếp cận của tôi.

Vì vậy, câu hỏi của tôi là: Cách tốt nhất để thực hiện thuật toán dẫn đường hàng loạt cho nhiều "bot" theo cách hiệu quả nhất là gì.

Cảm ơn,

James

+1

Dường như 'findGraphNode' trong mã mà sẽ đưa tuyến tính thời gian, trong khi nó phải được dành thời gian liên tục (với một bảng băm), do đó việc triển khai đó là tối ưu. –

+0

Tôi sẽ xem xét xem tôi có thể tăng tốc độ một chút không. Nhưng tôi nghĩ ngay cả với việc tìm đường đi hiệu quả hơn tôi vẫn sẽ kết thúc với các framerate chậm nếu tôi cố gắng và pathfind các chương trình .. Tôi bắt đầu nghĩ rằng đặt cược tốt nhất của tôi thực sự là pathfinding toàn bộ bản đồ một lần mỗi khung sau đó thiết lập một hướng trên mỗi khối có thể vượt qua để bot theo dõi .. – james

+1

@james nếu đây là bất kỳ thứ gì giống như hầu hết các tháp phòng thủ, với giá trị bản đồ và không có các collisons phức tạp (tức là bot không va chạm với nhau hoặc các vật thể di chuyển khác, hoặc bạn xử lý điều này một cách riêng biệt) sau đó có tôi sẽ nghĩ rằng tính toán đường dẫn cho toàn bộ bản đồ sẽ là tốt nhất.Trong thực tế, có lẽ bạn thậm chí không cần phải tính toán lại toàn bộ bản đồ mỗi khung hình. Nếu bạn cẩn thận trong việc xây dựng một thuật toán, bạn sẽ có thể xác định các nút nào bị ảnh hưởng bởi thay đổi của người dùng và chỉ tính toán lại 'ngược dòng' từ các nút đó. Nghe có vẻ thú vị! – Tim

Trả lời

2

Sử dụng Chống đối tượng, đây là cách duy nhất để có được pathfinding giá rẻ, afaik: http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

Chống đối tượng về cơ bản có nghĩa là thay vì chương trình có cá nhân ai, bạn sẽ có một "swarm ai", được ràng buộc với bản đồ trò chơi của bạn.


P.S .: Dưới đây là một liên kết về pathfinding nói chung (có thể là tài liệu tham khảo trực tuyến tốt nhất có sẵn): http://theory.stanford.edu/~amitp/GameProgramming/index.html

+0

cảm ơn vì tài nguyên, tôi sẽ xem xét một chút sau. Mặc dù chỉ từ những gì bạn đã nói nó có vẻ như nó có ý nghĩa hơn để pathfind toàn bộ bản đồ và có thể thiết lập một hướng trên mỗi "khối" mà các chương trình theo .. hmmm – james

0

Chỉ cần bộ nhớ cache kết quả.

Lưu trữ đường dẫn dưới dạng giá trị trong bảng băm (đối tượng), cung cấp cho mỗi nút một UUID, nối các UUID để tạo thành một khóa bảng băm duy nhất và chèn đường dẫn vào nó.

Khi bạn lấy con đường trở lại của bảng băm, bước đi trên con đường, và xem nếu nó vẫn còn hiệu lực, nếu không, tính toán lại và chèn một mới trở lại trong.

Có nhiều tối ưu hóa mà bạn có thể làm :)

giống như c69 nói đám AI hoặc tâm hive tôi suy nghĩ: P

Các vấn đề liên quan