Thực hiện làm mịn mạng


13

Chúng tôi đang thực hiện một game bắn súng góc nhìn người thứ nhất. Máy khách sẽ gửi vị trí của nó đến máy chủ ở một tốc độ cố định (hiện tại là 10Hz). Máy chủ sẽ gửi một tin nhắn liên quan đến tất cả các vị trí của người chơi cho tất cả người chơi ở cùng tốc độ (10Hz).

Đúng như dự đoán, phong trào này khá là rắc rối vì trò chơi 60fps chỉ nhận được cập nhật 10 lần một giây. Cách tốt nhất để làm mịn phong trào này là gì? Cách rõ ràng nhất sẽ là nội suy giữa hai gói cuối cùng, để phép nội suy kết thúc khi chúng ta nhận được một gói mới. Nhưng điều này thêm một độ trễ 100ms ngay lập tức cho tất cả người chơi.

Một cách khác là sử dụng vận tốc và gia tốc được suy ra từ một vài gói cuối cùng để dự đoán vị trí của người chơi trước khi gói tiếp theo đến, tuy nhiên nếu dự đoán sai, người chơi sẽ có xu hướng nhảy ngay khi nhận được gói mới .

Có ai biết làm thế nào tiêu đề AAA giải quyết vấn đề này?

Câu trả lời:


9

Họ làm chính xác những gì bạn vừa nói - một trong hai cách tiếp cận đó, hoặc một số thỏa hiệp giữa chúng. (ví dụ: chấp nhận một độ trễ nhỏ và nội suy khi có thể và ngoại suy khi ping vượt quá độ trễ đó.) Thay vì nhảy (còn được gọi là 'chụp nhanh') trở lại vị trí đã sửa, bạn thường thực hiện một số phép nội suy giữa dự đoán sai và giá trị đã hiệu chỉnh, làm mịn nó ra, nếu có thể. Bạn cũng xử lý các chỉnh sửa trong quá khứ để giảm số lượng chỉnh sửa bạn cần áp dụng.

Đây là một câu hỏi thường gặp và có một số liên kết chính tắc mà bạn có thể sẽ tìm thấy ở nơi khác trên gamedev.stackexchange.com nếu bạn tìm kiếm và chúng bao gồm các liên kết sau:

Những gì mọi lập trình viên cần biết về mạng trò chơi (điều này tóm tắt nội dung trong hai liên kết tiếp theo)

Nguồn nhiều người chơi

Kiến trúc mạng không thực

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.