Va chạm giữa những người chơi trong trò chơi đua xe nhiều người chơi


8

Tôi đang tạo một trò chơi đua xe đơn giản (tàu vũ trụ, không trọng lực) bằng cách sử dụng p2.js, phaser và node.js.

Những gì tôi đã làm: Khách hàng nhận trạng thái thế giới từ máy chủ:

  • ngoại suy người chơi khác dựa trên vận tốc / vị trí mới nhất từ ​​máy chủ
  • kiểm tra xem dự đoán phía khách hàng có đúng không - nếu không có vị trí áp dụng từ máy chủ và xử lý các đầu vào mà máy chủ không biết.
  • bước vật lý cố định

Người phục vụ:

  • nhận đầu vào từ khách hàng và áp dụng
  • bước vật lý cố định
  • gửi trạng thái thế giới cho mỗi khách hàng

Bây giờ tôi đang vật lộn với va chạm giữa những người chơi. Người chơi va chạm là nhảy mọi lúc trong khi va chạm. Tôi nghĩ đó là vì dự đoán phía khách hàng không tính toán kết quả tương tự với máy chủ.

Máy chủ không biết tất cả các đầu vào từ trình phát (lag).

Người chơi không có cùng vị trí va chạm với người chơi với máy chủ (lag).

Kết hợp hai điều này làm cho máy khách giải quyết xung đột khác với máy chủ và khi trạng thái thế giới đến, người chơi phải thực hiện một sự điều chỉnh lớn.


Có thể tăng dấu thời gian trên máy chủ để có ít nhất một sự điều chỉnh? Bạn đã thử làm cho người chơi sử dụng cùng một dữ liệu mà máy chủ có (vị trí gửi cuối cùng cũng như vị trí dự đoán của những người chơi khác) chưa?
dùng3797758

Gợi ý: Bạn đã cố gắng chỉ làm cho máy chủ tính toán sự va chạm? Máy khách sẽ chỉ được sử dụng để kết xuất và gửi / nhận dữ liệu (và phản ứng với bất kỳ dữ liệu nào nó nhận được, tất nhiên).
Greffin28

Câu trả lời:


1

Làm vật lý chỉ trên máy chủ. Dưới đây là một quy trình làm việc ví dụ:

  1. Khách hàng nhấn "chỉ đạo trái".
  2. Khách hàng gửi yêu cầu "chỉ đạo trái" đến máy chủ
  3. Máy chủ nhận dữ liệu.
  4. Máy chủ điều khiển máy khách trên máy chủ sang trái.
  5. Máy chủ phát hiện có sự va chạm giữa những người chơi.
  6. Máy chủ thực hiện chỉnh sửa dựa trên va chạm.
  7. Máy chủ gửi dữ liệu vị trí cho khách hàng.
  8. Khách hàng nhận được dữ liệu vị trí.
  9. Khách hàng điều chỉnh vị trí của nó.

0

Nếu bạn muốn sự tương tác của người chơi cảm thấy tức thời thì có một vài lựa chọn. Nếu không thì chỉ làm vật lý ở phía máy chủ.

Tùy chọn 1 : Phía khách hàng phát hiện va chạm và dữ liệu va chạm được gửi đến máy chủ và / hoặc trực tiếp đến máy khách khác. Một số game bắn súng nhiều người chơi thực hiện loại phát hiện va chạm này vì nếu không thì cơ chế bắn sẽ không cảm thấy chính xác.

Tùy chọn 2 : Phía máy chủ thực hiện vật lý, nhưng đưa ra nhiều dự đoán khác nhau. Bạn chỉ có thể sử dụng nhiều phiên bản của mỗi người chơi và dự đoán họ làm những việc hơi khác nhau. Hãy chắc chắn rằng họ không tự va chạm và gửi dữ liệu cho khách hàng. Mỗi lần chuyển động của người chơi khớp với dự đoán bạn sử dụng dữ liệu đã được gửi cho khách hàng.

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.