Cách xử lý chuyển động ngẫu nhiên theo thời gian thực với dự đoán phía khách hàng


10

Tôi đang xây dựng một trò chơi nhiều người chơi thời gian thực chạy cùng một vòng lặp 'vật lý' trên máy khách và máy chủ. Tôi đang sử dụng một hành vi lái 'đi lang thang' đó là chuyển động ngẫu nhiên cần thiết. Máy khách và máy chủ tạo các số Ngẫu nhiên khác nhau khi chạy các thuật toán giang hồ.

Tôi đang tự hỏi làm thế nào tôi có thể giữ một chuyển động tìm kiếm ngẫu nhiên tự nhiên nhưng sử dụng một số hằng số sẽ đảm bảo máy khách và máy chủ đi đến cùng một kết luận.


4
Tạo chuỗi ngẫu nhiên tương tự từ chuỗi số ngẫu nhiên giả là dễ dàng. Điều khó khăn là đồng bộ hóa việc sử dụng trình tự đó. Bạn cần làm cho logic trò chơi của bạn có tính xác định, không phải theo nghĩa là bạn không sử dụng một chuỗi ngẫu nhiên, mà là sử dụng chuỗi ngẫu nhiên theo cách xác định. Cách dễ nhất để đạt được điều này thường là tránh bất kỳ sự tương tranh nào trong vòng logic logic của trò chơi, tuy nhiên có thể có sự tương tranh miễn là các luồng không phụ thuộc vào thời gian và trình tự của PRNG khi yêu cầu PRNG cho một giá trị ngẫu nhiên. Đây là rồng.
Lie Ryan

Câu trả lời:


14

Bạn có thể sử dụng hạt giống ngẫu nhiên . Chọn cùng một giá trị 32 bit trong máy chủ và máy khách (hoặc máy chủ có thể gửi nó đến máy khách khi bắt đầu). Sử dụng nó như là hạt giống cho máy phát ngẫu nhiên. Bạn có thể gửi hạt giống thực tế từ máy chủ đến máy khách với bản cập nhật trạng thái trò chơi. Nếu bạn không muốn gửi nó, bạn phải chắc chắn rằng máy khách và máy chủ tạo ra cùng một số lượng ngẫu nhiên bởi trình tạo ngẫu nhiên này.

Những gì bạn nên biết trước khi bạn quyết định không gửi hạt giống thực tế cho khách hàng:

  • Bạn sẽ gặp vấn đề với việc loại bỏ nhân vật trên máy khách (có nghĩa là không xử lý các nhân vật chìm trong sương mù chiến tranh với khách hàng). Nếu bạn muốn loại bỏ ký tự, quyết định tốt nhất sẽ được gửi tất cả trạng thái ký tự (với hạt giống thực tế) từ máy chủ đến máy khách khi máy khách nên xử lý ký tự. Vì vậy, máy chủ phải quyết định khi nào máy khách nên xử lý ký tự và khi nào không nên. Hãy chắc chắn rằng bạn sử dụng các trình tạo ngẫu nhiên riêng biệt cho mỗi nhân vật.
  • Vấn đề tương tự sẽ xảy ra với AI lods.
  • Số ngẫu nhiên từ trình tạo ngẫu nhiên này phải được tạo chỉ trong bản cập nhật với delta thời gian cố định. Nếu bạn muốn sử dụng chữ số ngẫu nhiên để nội suy AI trước khi kết xuất, bạn nên sử dụng trình tạo ngẫu nhiên riêng biệt (không có kết xuất trên máy chủ, vì vậy đừng quan tâm bạn sẽ sử dụng hạt giống nào).
  • Nếu bạn muốn sử dụng các nền tảng khác nhau cho máy khách và máy chủ (ví dụ C ++ và Java), bạn phải triển khai (hoặc tìm) trình tạo ngẫu nhiên đa nền tảng. Đó không phải là một vấn đề lớn, bởi vì các trình tạo ngẫu nhiên dễ thực hiện.

3

Nếu cả máy chủ và máy khách đồng ý về hạt giống, hầu hết thuật toán ngẫu nhiên sẽ xuất ra các giá trị giống nhau.

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.