Làm thế nào để xử lý việc tìm đường và chuyển động thực thể trong một thế giới mạng lớn?


12

nhập mô tả hình ảnh ở đâyXem xét hình ảnh ở trên với các ô được chia thành các hộp 32x32, tôi có một thực thể được đánh dấu là 'người chơi gần đó' đến gần nó. Tôi muốn con quái vật này lý tưởng đuổi theo người chơi (và tiếp tục đuổi theo người chơi một lúc). Hiện tại, chuyển động duy nhất của tôi được thực hiện một bộ nội suy đơn giản cho các thực thể từ xa và điều này hoạt động vì khoảng cách giữa các cập nhật chuyển động khá nhỏ.

Tôi không thể thành công chỉ nói với khách hàng rằng quái vật muốn di chuyển đến vị trí mà anh ta đang ở, vì điều đó sẽ khiến thực thể di chuyển nhanh hơn nhiều so với bình thường (điều này có thể được giải quyết bằng cách sử dụng một số phép toán cho phép nội suy hiệu quả) nhưng quan trọng hơn là nó không thực tế và có thể cắt tường! Tôi không muốn mô phỏng toàn bộ chuyển động trên máy chủ nếu có thể tránh được ... mặc dù tôi đoán là tôi có thể nhưng điều đó vẫn không giải quyết được vấn đề cắt. Tôi nghi ngờ giải pháp liên quan đến một số tìm kiếm đường dẫn và gửi các cập nhật nút định kỳ của khách hàng và để chúng mô phỏng chuyển động nhưng tôi không chắc chắn.

Cảm ơn!

Câu trả lời:


9

Để bắt đầu đơn giản, bạn có thể thực hiện các hành vi chỉ đạo . Cụ thể là tìm kiếm hành vi . nhập mô tả hình ảnh ở đây

Ngoài việc tìm kiếm các nhân vật nên sử dụng tránh để tránh xa các chướng ngại vật .

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

Một khi bạn có những khía cạnh đó hoạt động, bạn có thể thực hiện một số cách thông minh hơn sau đây. Điều đó sẽ bao gồm tìm đường. Bây giờ thay vì lái về phía kẻ thù của họ, kẻ thù sẽ lái về phía từng nút trên con đường dẫn họ đến mục tiêu.

Khi kẻ thù đã "đủ gần", bạn có thể chuyển sang hành vi lái hoàn toàn. Vì chúng ít tốn kém hơn so với tìm đường và bạn sẽ nhận được kết quả tốt ở cự ly gần.

Chỉ đạo cũng sẽ cho phép bạn xác định tốc độ quay tối đa và tốc độ tối đa cho kẻ thù.

Chỉ đạo có thể được quản lý trên máy khách với các cập nhật định kỳ từ máy chủ để đảm bảo chúng vẫn đi đúng hướng.


Điều này có nghĩa là mô phỏng hành vi lái trên máy chủ hay tôi có thể logic 'chụp' thực thể dọc theo đường dẫn không? Tôi không cần sự ưu tiên lớn.
Vaughan Hilts

Chỉ đạo lái sẽ phải được mô phỏng (mặc dù nó không nặng lắm). Tuy nhiên, việc điều khiển các điểm tham chiếu có thể được cập nhật mà không cần mô phỏng. Đơn giản chỉ cần đảm bảo rằng máy khách nằm trong phạm vi của điểm "hiện tại" và hướng đến điểm chính xác là "điểm tiếp theo" của nó. Điều này sẽ liên quan đến một số ảnh chụp nhanh nếu thực thể không theo dõi và đột nhiên cập nhật.
MichaelHouse

+1 cho câu trả lời tuyệt vời. Cảm ơn vì đã tiết kiệm vài giờ của tôi.
Md Mahbubur Rahman

1

Tôi không thể thành công chỉ nói với khách hàng rằng quái vật muốn di chuyển đến vị trí anh ta đang ở, vì điều đó sẽ khiến thực thể di chuyển nhanh hơn nhiều so với bình thường (điều này có thể được giải quyết bằng cách sử dụng một số phép toán cho phép nội suy hiệu quả)

Trên thực tế điều này là đơn giản để làm. Hướng di chuyển sẽ là vị trí mục tiêu trừ đi vị trí hiện tại. Tất cả những gì bạn cần làm là thu nhỏ vectơ đó xuống tốc độ di chuyển mà bạn thực sự muốn. Lặp lại mọi khung hình.

nhưng quan trọng hơn là nó không thực tế và có thể cắt tường! Tôi không muốn mô phỏng toàn bộ chuyển động trên máy chủ nếu có thể tránh được ...

Bạn cần mô phỏng chuyển động trên máy chủ. Làm thế nào khác bạn sẽ biết rằng tất cả người chơi đang nhìn thấy hành vi tương tự?

Bạn sẽ cần một số đường dẫn cơ bản. A * là tiêu chuẩn. Bạn có thể tính toán một đường dẫn đến mục tiêu và sau đó theo đường dẫn đó chỉ đơn giản là một trường hợp thiết lập các vectơ chuyển động như trên. (Hoặc bạn có thể sử dụng các hành vi lái như trong câu trả lời của Byte56, về cơ bản là giống với một số tính năng bổ sung.)

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.