Tìm kiếm một kỹ thuật tốt cho chuyển động của nhân vật trong trò chơi hack & slash


51

Tôi đang tạo trò chơi hack & slash và tôi muốn các nhân vật của mình di chuyển như ví dụ trong Torchlight, Diablo, v.v. Hiện tại tôi tạo tập hợp các nút cho tất cả các khu vực có thể đi bộ của một tầng. Khi tôi nhấp vào một nơi nào đó, người chơi sẽ đến đó thông qua đường dẫn nội suy của các nút. Điều này không có vẻ rất tự nhiên. Người chơi di chuyển như một con robot. Kẻ thù cũng sử dụng hệ thống nút này để di chuyển và chia sẻ cùng một vấn đề nhưng tôi có thêm một vấn đề với chúng. Khi kẻ thù phát hiện người chơi, họ đi đến anh ta bằng một con đường ngắn nhất. Đôi khi, họ sử dụng cùng một đường dẫn và xếp hàng tới người chơi thay vì vây quanh anh ta. Tôi không biết làm thế nào để khiến kẻ thù chọn những con đường khác nhau và bao quanh người chơi. Bạn có biết làm thế nào tôi có thể giải quyết vấn đề này? Có lẽ tôi nên sử dụng cách tiếp cận khác nhau cho chuyển động nhân vật?


Kỹ thuật hiện tại của tôi:

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


Ảnh chụp màn hình đèn pin:nhập mô tả hình ảnh ở đây

--- CẬP NHẬT ---

Tôi muốn biết làm thế nào để đối phó với những tình huống này:

Tình huống 1, tôi gặp trở ngại động / tĩnh

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

Tình huống 2, Kẻ thù có đường dẫn sam đến người chơi (vào hàng đợi để chiến đấu với chúng tôi) nhập mô tả hình ảnh ở đây


10
+1 cho sơ đồ và ảnh chụp màn hình (và một câu hỏi hay). Luôn hữu ích.
Vịt Cộng sản

Đây là một câu hỏi tuyệt vời (+1) mà tôi hy vọng sẽ có nhiều cuộc thảo luận và đề xuất về các cách khác nhau để đối phó với thách thức này (ảnh hưởng ngẫu nhiên để thay đổi tuyến đường, AI, v.v.).
Randolf Richardson

1
Tôi thấy đó là một thực hành tốt để sử dụng một hệ thống tính điểm khi bạn đang tạo ra một AI. Tùy thuộc vào điểm số của từng kẻ thù (ví dụ thời gian tiếp cận người chơi), bạn có thể cung cấp cho họ hành vi cụ thể. Ví dụ: nếu 8 mob là tối đa có thể tấn công người chơi, thì những người có số điểm cao hơn tám người đầu tiên có thể cố gắng tìm đường đi dài hơn tới người chơi, khiến họ trông thông minh hơn.
Jonathan Connell

Tôi vẫn đang tìm kiếm câu trả lời, làm thế nào tôi có thể đối phó với các chướng ngại vật (động / tĩnh) trên lưới điều hướng? , Tôi không thể sử dụng Recast
piotrek

Câu trả lời:


24

Hành vi chỉ đạo kết hợp với một cấu trúc dữ liệu điều hướng .

Có một số cách để làm điều này, nhưng đó là khái niệm cơ bản. Có thể dễ dàng hơn khi sử dụng lưới điều hướng để bạn có thể áp dụng tìm đường trong mỗi phần lồi.

Nếu bạn kiên quyết giữ một biểu đồ, bạn có thể sử dụng hành vi Tìm kiếm cho mỗi nút trong đường dẫn, thay vì cứng nhắc theo một đường dẫn từ nút này sang nút khác.

Một phương pháp khác bạn có thể sử dụng là Path Smoothing nhưng hãy nhớ rằng điều này khá tốn kém về mặt tính toán.

Mong rằng sẽ giúp.

BIÊN TẬP:

Để giúp đỡ với các vấn đề tránh chướng ngại vật của bạn, hãy sử dụng một số loại Tránh chướng ngại vật .


Thx cho câu trả lời, bạn có biết làm thế nào tôi có thể tạo lưới điều hướng? Hoặc có cách nào khác để làm cho nó? Bản đồ của tôi, được tạo ra với các mảnh sàn liền mạch (hình tứ giác / hình tam giác).
piotrek

1
Bạn luôn có thể sử dụng Recast ( code.google.com/p/recastnavulation ) để tạo lưới điều hướng. Bạn chỉ cần cho nó một "súp tam giác" (một loạt các đa giác) và nó sẽ tạo ra nó cho bạn.
Ray Dey

Tôi có phải là người duy nhất gặp phải điều này không nhưng liên kết: ai-blog.net/archives/000152.html đã chết. Trên thực tế tôi không thể truy cập www.ai-blog.net
123iamking

3

Nếu bạn thích sử dụng nút bấm hơn là chuyển sang lưới điều hướng như những người khác đã đề xuất, thì bạn có thể giải quyết vấn đề "xếp hàng cho người chơi thay vì vây quanh anh ta" bằng cách chỉ định mỗi kẻ thù tấn công từ một hướng cụ thể.

Có nhiều cách để thực hiện điều này, nhưng tôi thường sử dụng hệ thống 'mã thông báo' để gán các hướng duy nhất cho quái vật, trong đó đối tượng người chơi sở hữu một mã thông báo cho mỗi hướng (bắc, đông bắc, đông, v.v.). Khi kẻ thù muốn dẫn đường đến người chơi, trước tiên, nó phải nhận được mã thông báo từ anh ta. Hướng được chỉ định bởi mã thông báo cho quái vật biết phía nào của người chơi mà nó được phép tìm đường đến. Vì người chơi chỉ có một mã thông báo cho mỗi hướng và quái vật cần mã thông báo trước khi họ có thể tấn công, nhiều quái vật sẽ không cố gắng đi đến cùng một phía của người chơi, điều này sẽ phá vỡ đường đi của họ một chút.

Ngoài ra, bạn cũng có thể muốn áp dụng một hình phạt nhỏ cho các nút trong quá trình tìm đường, để khuyến khích quái vật tiếp cận từ hướng khớp với mã thông báo mà chúng có. (Nghĩa là, nếu một quái vật có mã thông báo cho phép nó tấn công từ phía đông, thì với mục đích xác định "con đường ngắn nhất" cho quái vật đó, hãy đối xử với bất kỳ nút đường dẫn nào ở phía bắc / tây / nam của người chơi như thể chúng là một số nút, thay vì chỉ một). Điều này sẽ khiến quái vật tách ra nhanh hơn và cố gắng hất người chơi, thay vì hành quân đến người chơi trong một tập tin duy nhất và chỉ lan rộng ở bước cuối cùng.


2

Về cơ bản cho kẻ thù những gì bạn muốn làm là thực hiện tìm đường ở cấp độ vĩ mô (nghĩ về việc tạo các khu vực lồi và đường dẫn đến khu vực mà người chơi đang ở) và thực hiện một số hành vi lái kiểu boid ở cấp độ vi mô (khi bạn đã đóng cho người chơi).

Dưới đây là ví dụ về hành vi khoe khoang: http://www.red3d.com/cwr/boids/

Đối với người chơi, tôi nghĩ rằng đèn pin thực hiện tìm đường trên lưới điều hướng nơi bạn nhấp / kéo và điều đó hoạt động khá tốt. Nó có thể cảm thấy bị ngắt kết nối nhiều hơn một chút so với điều khiển trực tiếp, nhưng nó dẫn đến kết quả tốt hơn cho người chơi.


Nhưng, những gì ví dụ với cầu thang? Kẻ thù có thể tấn công tôi ở đó quá, làm cho nó một lưới hải quân?
piotrek

Nó phải là một phần của lưới điều hướng, là hình dạng lồi của chính nó.
Tết

1
Ngoài ra, bạn có thể tiếp tục sử dụng điểm của mình để chỉ đường dẫn và quay lại các hành vi lái dựa trên vật lý khi bạn "đóng".
Tết

Làm thế nào tôi có thể đối phó với các chướng ngại vật động trên các lưới điều hướng?
piotrek

1
Đây là một bài đăng trên blog về cách recast đang xử lý nó: digestingduck.blogspot.com/2011/03/ .
Tetrad

1

có một thuật toán tên là rrt được sử dụng cho vấn đề tìm đường trong thế giới thực. bề mặt mà anh hùng (hoặc kẻ thù) của bạn có thể đi trên là một đầu vào cùng với suface mà các đối tượng có thể di chuyển, và bằng cách sử dụng một số thuật toán tối ưu hóa, nó tìm thấy một đường dẫn đến đích của bạn. nhiều như tôi biết thuật toán này được sử dụng rất nhiều trong các giải đấu robocup. nó nhanh, tìm ra con đường ngắn nhất và tránh va chạm và rẽ ngoặt. bạn có thể sử dụng chương trình powerpoint này để hiểu cách nó tạo đường dẫn.


sau khi nhìn kỹ hơn, có vẻ như bài thuyết trình tôi cung cấp chỉ cho biết rrt làm gì và cũng đề xuất một phê duyệt mới, nó tuyên bố sẽ hoạt động tốt hơn trong một số trường hợp, và ông đề xuất rằng thuật toán cho tìm kiếm trò chơi RTS hy vọng nó sẽ giúp bạn.
Ali1S 232

0

Để làm cho các tuyến tìm đường trông "thực tế" hơn, tôi khuyên bạn nên xem bài viết về A * trông tự nhiên trong Lập trình trò chơi Đá quý Vol.1

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.