Tôi muốn tạo một trò chơi nhiều người chơi máy chủ thời gian thực đơn giản như một dự án cho lớp kết nối mạng của tôi.
Tôi đã đọc rất nhiều về các mô hình mạng nhiều người chơi trong thời gian thực và tôi hiểu mối quan hệ giữa máy khách và máy chủ và các kỹ thuật bù trễ.
Những gì tôi muốn làm là một cái gì đó tương tự như mô hình mạng Quake 3: về cơ bản, máy chủ lưu trữ một ảnh chụp nhanh của toàn bộ trạng thái trò chơi; khi nhận được đầu vào từ máy khách, máy chủ sẽ tạo một ảnh chụp nhanh mới phản ánh các thay đổi. Sau đó, nó tính toán sự khác biệt giữa ảnh chụp nhanh mới và ảnh chụp cuối cùng và gửi chúng cho khách hàng, để chúng có thể được đồng bộ hóa.
Cách tiếp cận này có vẻ rất chắc chắn đối với tôi - nếu máy khách và máy chủ có kết nối ổn định, chỉ có lượng dữ liệu cần thiết tối thiểu sẽ được gửi để giữ chúng đồng bộ. Nếu khách hàng không đồng bộ, cũng có thể yêu cầu một ảnh chụp nhanh đầy đủ.
Tuy nhiên, tôi không thể tìm thấy một cách tốt để thực hiện hệ thống chụp nhanh. Tôi thấy thực sự khó khăn khi di chuyển khỏi kiến trúc lập trình một người chơi và suy nghĩ về cách tôi có thể lưu trữ trạng thái trò chơi theo cách:
- Tất cả dữ liệu được tách ra khỏi logic
- Sự khác biệt có thể được tính giữa ảnh chụp nhanh của trạng thái trò chơi
- Các thực thể trò chơi vẫn có thể dễ dàng thao tác thông qua mã
Làm thế nào là một lớp chụp nhanh được thực hiện? Làm thế nào là các thực thể và dữ liệu của họ được lưu trữ? Có phải mọi thực thể khách hàng đều có ID khớp với ID trên máy chủ không?
Sự khác biệt ảnh chụp được tính như thế nào?
Nói chung: làm thế nào một hệ thống chụp nhanh trạng thái trò chơi sẽ được thực hiện?