Tôi đang làm việc trên một công cụ trò chơi nhiều người chơi máy chủ 2D (mà bạn có thể thử ở đây ). Nó sử dụng WebRTC DataChannel
s. (Các kết nối là ngang hàng, nhưng máy chủ ngang hàng vẫn hoạt động như một máy chủ.)
Vấn đề lớn nhất (ngoài kết nối) là dự đoán đầu vào cục bộ. Chúng tôi làm như thường lệ: Khi nhấn phím, người chơi di chuyển ngay lập tức, báo cho chủ nhà biết phím nào được nhấn, nhận lại dữ liệu từ máy chủ và so sánh với vị trí lịch sử. Vị trí được điều chỉnh theo thời gian nếu có sự khác biệt. Điều này hoạt động tốt với mất gói hoặc PDV thấp , ngay cả khi ping cao.
Nếu có mất hoặc PDV, độ lệch có thể lớn hơn. Tôi nghĩ điều này là do nếu gói đầu tiên biểu thị thay đổi đầu vào bị trì hoãn hoặc bị hủy, máy chủ sẽ phát hiện ra sau đó và bắt đầu thay đổi trình phát đó muộn hơn so với dự đoán đầu vào cục bộ của chúng.
Nếu người chơi đang di chuyển, chúng tôi sẽ tăng số lượng hiệu chỉnh được áp dụng, vì nó ít gây chú ý hơn. Điều này dường như để che lấp những khoảng trống khi bắt đầu di chuyển và trong khi di chuyển. Tuy nhiên, bất kỳ sự điều chỉnh nào cũng đáng chú ý hơn nếu chúng dừng đột ngột. Sau đó, nếu PDV hoặc mất có nghĩa là máy chủ nghĩ rằng họ dừng lại sau đó, máy chủ sẽ ghi đè, gửi lại dữ liệu nói rằng họ tiến xa hơn một chút và việc sửa lỗi khiến người chơi bị trôi đi một chút. Trên các kết nối không ổn định, người chơi thường trôi dạt đáng chú ý sau khi dừng lại.
Tôi đã không nhận thấy điều này trong các trò chơi khác. Làm thế nào điều này có thể được giảm nhẹ?