Làm cách nào để đồng bộ hóa các hành động như nhảy trong nhiều người chơi?


11

Tôi là một nhà phát triển trò chơi người mới và tôi đã nghiên cứu về các trò chơi nhiều người chơi. Tôi quan sát thấy rằng luôn có một số độ trễ, người chơi luôn nhận được cập nhật từ các hành động trong quá khứ. Nhưng có những kỹ thuật như tính toán chết để xử lý độ trễ. Tôi có thể dự đoán chuyển động và làm cho chuyển động trơn tru. Nhưng làm thế nào để tôi thực hiện các hành động đồng bộ hóa như nhảy, dừng bước, v.v.

Giả sử, khách hàng A đang di chuyển, anh ta ở tốc độ 100m tại thời điểm 10,2 với tốc độ 100m / giây và gửi thông tin này. Khách hàng B sẽ nhận được thông tin này sau đó, hãy để nó là 10,4. Vì vậy, tại khách hàng B, tôi có thể sử dụng dự đoán và đặt khách hàng A ở độ cao 120m. Nhưng nếu, khách hàng thực hiện cú nhảy ở 110m lúc 10.3. Tôi không thể dự đoán điều đó và vì tôi đã sử dụng dự đoán nên tôi không thể cho khách hàng thấy một bước nhảy trong quá khứ.

Tôi có thể giải quyết vấn đề này bằng cách không gửi hành động nhảy nào cả. Nhưng chuyện gì sẽ xảy ra nếu trò chơi của tôi có một số khoảng trống nơi người chơi có thể ngã và chết. Vì vậy, nếu tôi không đồng bộ hóa các hành động nhảy, những người chơi khác sẽ quan sát thấy một người chơi đang chạy thì anh ta rơi vào khoảng trống và sau đó lại xuất hiện trên màn hình phá hủy sự tham gia trực quan.

Jump chỉ là một ví dụ, có thể có nhiều kịch bản mà dự đoán không thể hoạt động. Vì vậy, làm thế nào để đối phó với họ. Một ví dụ như vậy có thể là các trò chơi đấu trường trực tuyến nhiều người chơi như Awesomenauts.


Tôi không biết nhiều về Nhiều người chơi, vì vậy tôi sẽ không thể đưa ra câu trả lời thích đáng. Nhưng từ những gì tôi đã chọn, thiết lập lý tưởng sẽ là các máy khách của bạn sẽ ít nhiều bị câm và chỉ gửi bàn phím, chuột, gamepad hoặc bất kỳ đầu vào nào đến máy chủ, và máy chủ thực hiện toàn bộ chuyển động và cập nhật thế giới và gửi các vị trí và tất cả các dữ liệu liên quan khác cho khách hàng, sau đó hiển thị kết quả. Tất cả điều này nhưng loại bỏ dự đoán và những điều tương tự.
Christian

@Christian này! Cảm ơn vi đa trả lơi. Tôi biết về cách tiếp cận này nhưng điều này có thể khiến trò chơi bị giật nếu độ trễ cao và hơn nữa tôi sử dụng hệ thống thời gian thực BaaS của AppWarp, vì vậy tất cả logic của tôi chỉ nằm ở phía khách hàng.
Suyash Mohan

Kết hợp cả hai phương pháp của bạn là máy chủ có thẩm quyền. Cả khách hàng và máy chủ đều mô phỏng, khách hàng gửi đầu vào của họ, máy chủ gửi lại trạng thái có thẩm quyền. Khách hàng điều chỉnh trạng thái của họ để phù hợp với trạng thái có thẩm quyền. Vì vậy, khi các trạng thái khớp với nhau, các máy khách chạy giống như chúng được mô phỏng cục bộ (không có độ trễ).
MichaelHouse

Gần đây tôi đã tìm thấy loạt bài hướng dẫn này để đưa ra những lời khuyên tốt về việc quản lý độ trễ, có vẻ như nó sẽ phù hợp với sở thích của bạn: link
Kris Welsh

Câu trả lời:


8

Xác định chết có thể không phải là ý tưởng tốt nhất trong trường hợp này; bạn nên thực hiện phép nội suy thực thể (hiển thị hiệu quả các trình phát khác trong quá khứ, luôn cung cấp cho bạn các vị trí thực, hợp lệ). Tôi đã viết về điều này với nhiều chi tiết hơn ở đây . Việc có thấy người chơi hơi trong quá khứ có được chấp nhận hay không phụ thuộc vào chi tiết những gì bạn đang cố gắng thực hiện.


4
Tôi đã sử dụng phương pháp này khi viết trò chơi nhiều người chơi nối mạng đầu tiên của mình. Trong thực tế, tôi đã sử dụng @ ggambett's làm tài liệu tham khảo. Nó làm việc tốt cho tôi.
NoobsAreP People2

1

Có một bài viết khá chi tiết liên quan đến công cụ nguồn. Nó sẽ xuất hiện một số mã nguồn có liên quan cũng có sẵn như là một phần của SDK nguồn.

https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

Nó sử dụng một số kỹ thuật để thử và xử lý độ trễ mạng trong mô hình máy chủ-máy khách. Điểm chính dường như là máy khách cục bộ xử lý đầu vào và các sự kiện khác cục bộ như thể không có máy chủ, và sau đó xử lý khả năng máy chủ nói rằng máy khách đã làm sai sau đó.

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.