Làm cách nào để đồng bộ hóa máy khách và máy chủ khi gửi thay đổi tốc độ trình phát?


10

Tôi đang thực hiện dự đoán phía khách hàng. Hầu hết các giải thích đều cho rằng khách hàng gửi tin nhắn như " Di chuyển trình phát của tôi lên 1 vị trí ". Điều gì xảy ra nếu tôi gửi tin nhắn như " Đặt vận tốc của người chơi của tôi thành x "?

đồ họa giải thích;  hiển thị tin nhắn đã gửi và vị trí tính toán trên máy khách và máy chủ theo thời gian

Trên máy khách, người chơi đặt vận tốc của riêng mình (theo dự đoán phía máy khách) trước khi máy chủ thực hiện, dẫn đến việc cả hai không đồng bộ. Vấn đề này vẫn tồn tại ngay cả khi xem xét độ trễ trung bình.

Làm thế nào tôi có thể giải quyết điều này?

Câu trả lời:


8

Bạn nên gửi dữ liệu dư thừa, ở đây có nghĩa là gửi vị trí và vận tốc. Ngay cả khi bạn không đồng bộ, thực tế là bạn có vị trí và vận tốc cho phép bạn điều chỉnh quỹ đạo bằng cách sử dụng hàm nội suy.

Sau đó, sử dụng một số thủ thuật như hình ảnh động bị trì hoãn, tăng tốc, vv cho phép che giấu độ trễ.

Chỉnh sửa: Tôi giả sử rằng máy chủ có thẩm quyền.


Cảm ơn câu trả lời của bạn. Có, Máy chủ có thẩm quyền nhưng ngay cả khi tôi gửi dữ liệu dư thừa với tốc độ của mình, khách hàng có thể sửa lỗi của mình nhưng tôi thường đọc những câu như "Nếu máy khách / máy chủ sử dụng mã chia sẻ cho các thực thể của họ, lỗi dự đoán sẽ không bao giờ thực sự xảy ra" nhưng trong trường hợp của tôi, họ sẽ LUÔN xảy ra một chút sẽ gây ra nói lắp.
Blu3

1
@ user13842 máy khách sẽ luôn thoát khỏi đồng bộ, bạn nên sửa vị trí và tốc độ phía máy khách, như Thelvyn đã nói, theo những gì máy chủ gửi cho bạn. theo cách đó, bạn không nhận được chuyển động nói lắp trừ khi khách hàng của bạn hoàn toàn không đồng bộ thì bạn sẽ phải chụp các giá trị vì việc chỉnh sửa sẽ mất quá nhiều thời gian.
dreta

Đây là lý do chính để sử dụng hàm nội suy. Bạn không thể tránh độ trễ, vì vậy bạn phải điều chỉnh chuyển động một cách trơn tru. Máy khách và máy chủ mô phỏng thế giới nhưng máy khách phải lắng nghe máy chủ và thực hiện chỉnh sửa. Một số kỹ thuật được sử dụng trong mạng Source Engine: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Thelvyn

nó cũng được đề cập ngắn gọn trong cuộc nói chuyện trên google này, nó sẽ có ý tưởng trên youtube.com/watch?v=Prkyd5n0P7k#t=18m47s
dreta

Ive tìm thấy một giải pháp khác cho vấn đề đặc biệt này. Tôi thêm thời gian khách hàng áp dụng đầu vào của mình với mỗi gói. Ý nghĩa số 1 sẽ có thời gian: 0 và lần thứ hai: 100. Bây giờ Máy chủ biết rằng máy khách đã nhấn nút của mình tại thời điểm: 100 chứ không phải trước đó.
Blu3
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.