Đi theo con đường một cách suôn sẻ


9

Tôi hiện đang thực hiện một trò chơi phòng thủ tháp 2d với làn đường tĩnh, được xác định trước mà kẻ thù theo dõi (tức là tháp không thể chặn đường và việc tìm đường không phải là vấn đề tôi đang cố gắng giải quyết).

Tôi đang cố gắng tìm cách chính xác để làm cho các đơn vị đi theo làn đường này một cách trơn tru . Tôi có hai ý tưởng sơ bộ về cách thực hiện việc này, nhưng tôi sẽ thích một số đầu vào có khả năng dễ thực hiện hơn / kỹ thuật chuẩn hơn. Hoặc tất nhiên nếu tôi có một số cách hoàn toàn khác mà tôi chưa từng nghĩ tôi cũng muốn tìm hiểu về điều đó.

Điểm tham chiếu: Ý tưởng đầu tiên của tôi là xác định đường dẫn là một loạt các điểm tham chiếu được mã hóa cứng. Các đơn vị sau đó sẽ sử dụng thuật toán lái "tìm kiếm" cơ bản (chẳng hạn như thuật toán này ) để di chuyển đến từng điểm trên đường đi liên tiếp. Tuy nhiên, tôi đã tự hỏi liệu có thể khó để giữ cho các đơn vị không đi chệch khỏi làn đường mà tôi muốn họ đi theo. Tôi tự hỏi nếu không thể quay đủ mạnh có thể khiến họ loại "lướt" ra khỏi làn đường mong muốn. Tôi cho rằng tôi có thể ngăn chặn điều đó mặc dù bằng cách cho phép một lực lái tương đối mạnh được áp dụng?

Đường cong Bezier: Giải pháp thứ hai tôi đã xem xét là xác định đường dẫn có đường cong bezier và tại mỗi bước tính toán điểm dọc theo đường cong với (dt * speed) cách vị trí hiện tại của đơn vị. Tôi nghi ngờ rằng kỹ thuật này sẽ giúp việc xác định chính xác con đường mà các đơn vị sẽ đi theo dễ dàng hơn nhiều, nhưng tôi không biết chính xác cách thực hiện việc này. Bất kỳ đề xuất?

Ngoài ra, tôi không làm điều này sẽ thay đổi câu trả lời của bất kỳ ai, nhưng các đơn vị cũng phải có thể di chuyển với tốc độ không đổi dọc theo con đường. Ngoài ra, tôi đang lập trình trò chơi này bằng python bằng khung pyglet.

Nếu bất cứ điều gì về câu hỏi không rõ ràng xin vui lòng cho tôi biết.

Chỉnh sửa: Cũng với giá trị của nó, tôi đang cố gắng tái tạo hành vi di chuyển của kẻ thù trong Kingdom Rush .


Có liên quan: gamasutra.com/view/feature/131505/ Từ Loại mật độ / kích thước đơn vị nào liên quan đến gạch bạn đang sử dụng?
khỉ

Tôi sẽ xem bài báo đó! Tôi thực sự không sử dụng gạch, chỉ là tọa độ liên tục để chỉ định vị trí. Sẽ chỉ có một hình ảnh nền tĩnh cho thấy người chơi nơi các đơn vị sẽ di chuyển.
Pwnosaurus

Tôi cũng tìm thấy. gamedev.stackexchange.com/questions/26543/ Ấn A * hoạt động trên các bản đồ không có lưới. Nó có thể là một đường dẫn nút trên vương quốc bị cong theo cách tương tự.
khỉ

Có điều gì có thể khiến kẻ thù rời khỏi con đường và phải quay lại với nó không? Tôi hỏi bởi vì đề xuất đường cong Bezier của bạn cho thấy không có, trong trường hợp đó không có lý do gì bạn không thể tính toán dữ liệu tùy ý về toàn bộ đường dẫn và không cần logic "AI".
Kevin Reid

Câu trả lời:


8

Cho phép tôi giới thiệu bạn với bài báo nổi tiếng của Craig Reynold về Hành vi chỉ đạo cho các nhân vật tự trị . Nếu bạn chưa đọc nó, bạn nên, nó sẽ giúp bạn suy nghĩ về các loại vấn đề này, đặc biệt hãy xem phần về tìm đường .

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

Ý tưởng của bài báo của Reynold là bạn có thể sử dụng các lực đơn giản kết hợp với nhau để tạo ra sự điều hướng ngẫu hứng giống như cuộc sống xung quanh môi trường. Các phong trào không dựa trên kế hoạch đường đi hoặc tính toán toàn cầu, mà thay vào đó sử dụng thông tin địa phương, chẳng hạn như lực lượng của hàng xóm, giúp họ hiểu và thực hiện đơn giản, nhưng vẫn tạo ra các mẫu chuyển động rất phức tạp.

Vẻ đẹp của phương pháp này là bạn có thể kết hợp một số hành vi lại với nhau. Vì vậy, ví dụ, các nhân vật của bạn có thể có cả hành vi tìm đường cũng như hành vi phân tách (để giữ cho chúng không bị vón cục quá nhiều), có thể được kết hợp thành một tổng số có trọng số.

Một lợi ích khác khi sử dụng các hành vi chỉ đạo là có một số triển khai nguồn mở hiện có trong nhiều ngôn ngữ khác nhau (ví dụ: opensteer ).


CẬP NHẬT: Tôi đã xem Kingdom Rush và tôi nghĩ rằng tôi có thể đã hiểu nhầm ý của bạn là "trơn tru". Tôi nghĩ nó có nghĩa giống như thật hơn, nhưng tôi nghĩ những gì bạn theo đuổi giống như các nhân vật trên đường ray xe lửa. Ngoài ra, đọc kỹ hơn, tôi thấy rằng một trong những yêu cầu của bạn là "các đơn vị phải có khả năng di chuyển với tốc độ không đổi dọc theo con đường". Hành vi chỉ đạo sẽ không cung cấp cho bạn một tốc độ di chuyển liên tục, nhưng tìm đường đơn giản kết hợp với các điểm mốc sẽ. (Tức là không sử dụng hành vi "tìm kiếm" để đến điểm tham chiếu, thay vào đó chỉ cần xác định vectơ chỉ đường và để đơn vị di chuyển hết tốc độ đến điểm đó.) Sử dụng nhiều điểm tham chiếu hơn để làm trơn lộ trình.


2

Giải pháp trong bài viết Gamasutra này có thể là những gì bạn đang tìm kiếm. Ý tưởng cơ bản là chiếu tia tới một điểm trước hai bước so với điểm hiện tại của bạn "bước" tia một phần nhỏ của chiều dài của ô và tại mỗi "bước" của tia kiểm tra để xem liệu khối lượng va chạm của người chơi của bạn có va chạm với bất cứ điều gì không tại vị trí bước của tia. Nếu tia sáng đi hết điểm tới trước hai bước, thì bạn có thể thoát khỏi điểm trung gian. sau đó bạn có thể tiếp tục quá trình tương tự này đến điểm "mục tiêu" ... do đó, nếu đường đi của bạn có thể được thực hiện bằng một đường thẳng đến mục tiêu thì đường thẳng đến mục tiêu là con đường mà nhân vật của bạn sẽ đi. đây là bài viết: http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding.

Nó cũng chứa những điều tuyệt vời về bán kính quay vòng và các hành vi rẽ tự nhiên hơn và ...

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.