Đồng bộ hóa nhiều người chơi và tìm đường


8

Tôi có giao diện loại điểm và nhấp chuột trên máy khách chạy A * trên máy chủ để tìm đường dẫn.

Trò chơi được điều khiển giống như một RTS, nhưng thế giới vẫn tồn tại, do đó người chơi có thể tham gia / rời đi bất cứ lúc nào và sẽ chỉ có tối đa 30 đơn vị trên màn hình.

Cách tốt nhất để đồng bộ hóa các chuyển động của người chơi giữa máy chủ và máy khách, sau khi tôi đã tính toán đường dẫn?

Máy chủ có cần đồng bộ hóa máy khách trên mỗi bước / khung hình động không? hoặc có thể chỉ cho khách hàng "đi đến vị trí X, Y" cho từng nút trên đường dẫn và từng trình phát di chuyển không? Hoặc tốt nhất là chỉ chạy bộ định thời hoạt hình trên cả máy khách và máy chủ, và nó có được đồng bộ hóa theo cách đó không?

Việc trao đổi dữ liệu điển hình sẽ như thế nào đối với chuyển động dựa trên đường dẫn?

BIÊN TẬP:

Một số bạn đã gợi ý bước chân, vì tôi đã nói "RTS", nhưng trò chơi không phải là RTS, nó chỉ có cùng một loại giao diện. Sự khác biệt lớn là tôi cần có thể có người chơi tham gia và rời khỏi trò chơi bất cứ lúc nào . Xin lỗi vì đã không cụ thể hơn.

Câu trả lời:


2

Một cách khác là thực hiện tìm đường trên máy khách sở hữu thiết bị. Điều này có lợi thế là trải đều công việc ra đều hơn. Một bất lợi của việc thực hiện tất cả các tìm đường trên máy chủ là máy chủ phải thực hiện tất cả; Một nhược điểm của việc chỉ gửi các lệnh 'di chuyển đến X, Y' cho các máy khách là mỗi máy khách phải tìm mọi đường dẫn duy nhất. Thay vào đó, mỗi 'tick' trong chu trình bước khóa, mỗi khách hàng sẽ nói với máy chủ, theo nghĩa đen, từng bước tiếp theo của đơn vị họ. Máy chủ đảm bảo thiết bị thực sự có thể di chuyển đến đó và di chuyển thiết bị. Vì máy khách không có tất cả thông tin (Đáng chú ý là các đơn vị của máy khách khác đang làm gì), một lệnh di chuyển không hợp lệ sẽ không được coi là lỗi. Điều này đang từ bỏ một số băng thông để có thêm thời gian cho việc tính toán đường dẫn.

Thay thế máy chủ bằng ngang hàng; phương pháp này cũng hoạt động cho các trò chơi ngang hàng, miễn là bạn đảm bảo thứ tự các chuyển động đơn vị được xem là giống nhau trên tất cả các máy.


1

Các trò chơi RTS thường có đồng bộ hóa khóa (đồng bộ hóa xảy ra ở mọi khung hình). Nói bất kỳ đường dẫn nào đến máy khách sẽ cho phép các máy khách bị hack lạm dụng thông tin bổ sung.


1

Cũng không. Điều duy nhất bạn nên gửi là các lệnh. Ví dụ: 20 đơn vị này sẽ di chuyển đến (X, Y) và sau đó cho phép mỗi người chơi tìm ra cách họ đến đó. Phần khó khăn là đảm bảo tất cả họ đều làm điều tương tự chính xác. Để đạt được điều này, một mô hình bước khóa được sử dụng, các liên kết dưới đây sẽ giải thích chi tiết về nó. Ngoài ra, bạn chỉ nên đồng bộ các phần quan trọng. Bất cứ điều gì không thay đổi lối chơi không nên được đồng bộ hóa. Ảnh động trong các trò chơi RTS thường chỉ dành cho mặt trực quan.

Một điều nữa, các trò chơi RTS thường không phải là máy khách-máy chủ, mà là P2P. Bằng cách đó, một trong những người chơi không thể gian lận vì khi phát hiện thấy sự không nhất quán, bạn chỉ cần ngắt kết nối.

Đây là một cái gì đó để giúp bạn đi: http://www.gamasutra.com/view/feature/3094/1500_archftimeon_a_288_network_.php http://altdevblogaday.com/2011/07/09/synyncous-rts-engines-and- a-tale-of-desyncs / http://altdevblogaday.com/2011/07/24/synyncous-rts-engines-2-sync-harder/


Vấn đề là tôi cần người chơi có thể tham gia và rời đi bất cứ lúc nào. Trò chơi không phải là RTS, nó chỉ có giao diện tương tự.
mây

Nếu bạn có nhiều hơn nói, 50 đối tượng hoàn toàn động tại bất kỳ thời điểm nào bạn có thể cần xem xét cơ học RTS. Trò chơi của bạn giống như CIV hay LOL?
Peter lsted

Nó giống như Diablo, Dungeon Siege hoặc HoN, nhưng với điểm và nhấp chuột. Không nên có nhiều hơn ~ 20 đơn vị trên màn hình.
mây

1

Khi đường dẫn được tính toán, máy chủ chỉ sử dụng đường dẫn đó để điều khiển ký tự. Sự hiện diện của một đường dẫn không tạo ra sự khác biệt cho vấn đề này - bạn vẫn chỉ gửi cùng một dữ liệu, cho dù đó là cập nhật vị trí thường xuyên hay bất cứ điều gì. Thông thường, tốt nhất là gửi các vị trí thông thường (được nội suy trên máy khách để làm mịn chúng) và một thông báo riêng khi thiết bị dừng lại.


Ok, đó là những gì tôi sẽ hướng tới.
mây

1

Trong trò chơi của tôi (một trò chơi kiểu RPG nhiều người chơi), tôi gửi các phần của đường dẫn đến máy khách (đối với NPC gần đó), tức là. 3 vị trí tiếp theo và thời gian khi NPC sẽ ở đó. Đối với người chơi, tôi chỉ cần gửi vị trí hợp lệ mới nhất + dấu thời gian của nó để trên máy khách tôi có thể thực hiện tính toán chết (hoặc một cái gì đó chi tiết hơn nếu muốn).

Điều này hoạt động hoàn toàn OK chủ yếu vì không có xung đột giữa người chơi / NPC (với độ trễ thấp bạn không thực sự nhận thấy bất cứ điều gì, với độ trễ 250+ ms bạn nhận thấy sự khác biệt nếu bạn có thể thấy hai màn hình (của hai người chơi ) cùng một lúc nhưng nó vẫn không thực sự đáng chú ý trên 'một màn hình').

Vì vậy, tôi muốn nói: hãy bắt đầu với việc tạo máy chủ (vị trí hợp lệ + dấu thời gian của người chơi và cho AI ngay từ đầu, bạn có thể tạo một hệ thống phức tạp hơn cho NPC sau này mà không gặp vấn đề gì lớn) + dự đoán của khách hàng.

ps. Tôi sử dụng độ chính xác mili giây hoạt động hoàn toàn ổn, ngoại trừ một int đã ký chỉ giữ trong khoảng 3 tuần trước khi tôi phải khởi động lại máy chủ.

Bạn cũng có thể muốn kiểm tra dự đoán thời gian (ví dụ: cố gắng đồng bộ hóa gần nhất có thể với máy chủ).

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.