2012-01-20 38 views
12

Tôi muốn tạo một trò chơi pong 2 người chơi sử dụng websockets và máy chủ node.js. socket.io được sử dụng trên cả máy khách và máy chủ. Cho đến nay, trải nghiệm duy nhất của tôi là tạo ứng dụng trò chuyện.Cách sử dụng websockets để chơi game thời gian thực

Đây là nỗ lực đầu tiên của tôi trong trò chơi nhiều người chơi nên tôi không quen với trò chơi trên mạng. Nếu máy chủ theo dõi:

  1. Mọi vị trí của quả bóng và tần suất hoặc thời điểm?
  2. chuyển động của người chơi, người chơi di chuyển sang trái hoặc sang phải, nếu tôi nhấn và giữ một lúc thì làm cách nào để xử lý việc này? Tôi có nên gửi như pressHoldStartPositionpressHoldStopPosition không? Tôi đoán điều này là dễ dàng nếu tôi chỉ cho phép nhấn nhưng không giữ.

những suy nghĩ của tôi:

  1. Khi bóng chạm một cầu thủ, khách hàng sẽ tính toán vận tốc, bắt đầu và điểm kết thúc và các khách hàng khác nên thực hiện các hình ảnh động đúng từ đó.
  2. Không có ý tưởng.
+1

Bạn chắc chắn nên xem blog @RobHawkes: http://rawkes.com/ Anh ấy đã phát triển và tiếp tục xây dựng, một trò chơi nhiều người chơi HTML5 có tên Rawkets http://rawkets.com/. Tôi chắc chắn anh ấy sẽ chia sẻ một loạt thông tin về các chủ đề rất phù hợp với những gì bạn đang tìm kiếm và những điều bổ sung bạn sẽ gặp phải. – leggetter

Trả lời

13
  1. Khách hàng tính - không có gì - trừ khi bạn muốn nó dự đoán bước trò chơi tiếp theo * (máy chủ anwser).Toàn bộ trò chơi chạy trên máy chủ là một nguồn dữ liệu và tính toán đáng tin cậy duy nhất. Trong pong như trò chơi, nơi có ít hơn 10 đối tượng bạn có thể gửi dữ liệu khá thường xuyên (khoảng 50ms sẽ làm). Đối với một quả bóng tôi muốn gửi [x, y, vận tốc hoặc góc], cho một mái chèo [x, y]. Sau đó nội suy (animate trong thời gian - 50ms) giữa cũ (x, y trên máy khách) và mới (x, y mà bạn vừa nhận được từ máy chủ).

  2. Không gửi bản sao milion của - trình phát được nhấn - thay vì gửi một gói mỗi khoảng thời gian (100ms?) Có chứa thông tin như "trình phát được nhấn" trong 100ms hoặc "vị trí đặt trình phát" tới (32 , 100) sau đó kiểm tra phía máy chủ là di chuyển này có thể và chấp nhận nó hoặc từ chối.

Có lẽ chủ đề này sẽ giúp với cuộc phiêu lưu của bạn:

Multiplayer JavaScript game built with Node.JS - Separating players

[* 1] preditction là một cơ chế bồi thường lag mà bạn có thể thực hiện sau đó. Theo cách đơn giản, nó có nghĩa là máy chủ và khách hàng chia sẻ một số mã logic trò chơi và khi khách hàng không có dữ liệu hiện tại từ máy chủ, nó cố gắng mô phỏng những gì đang xảy ra trong trò chơi thực.

2

Bạn sẽ tìm sách, về sách, về mạng trò chơi.

Trong mô tả ngắn gọn, dưới đây là những gì tôi thấy một triển khai thú vị: Máy chủ và máy khách sẽ tính toán vật lý của trò chơi. Server sẽ là một master, và có một trạng thái chính xác của tất cả các thực thể, trong khi client sẽ cố gắng "dự đoán" trạng thái của các thực thể và giữ một animation mượt mà. Máy khách sẽ nhận được cập nhật trạng thái chính xác của các thực thể từ máy chủ theo định kỳ. Trong một số trò chơi, bạn có thể thấy các thực thể đột nhiên dịch chuyển, và đó là vì vị trí được dự đoán của khách hàng không khớp với vị trí thực tế của máy chủ.

Trạng thái của thực thể, chẳng hạn như bóng hoặc người chơi, thường chứa thông tin như vị trí, vận tốc, trạng thái nút (phím tắt/khóa).

Bên cạnh đó, nó cho phép trí tưởng tượng của bạn trở nên hoang dại và thử nghiệm giải pháp tốt nhất và xem những gì hiệu quả. Có rất nhiều điều cần cân nhắc, chẳng hạn như độ trễ của người chơi và băng thông.

2

Có một trang web stackexchange dành riêng để phát triển game: https://gamedev.stackexchange.com/

thực hành tốt nhất là chỉ gửi bản cập nhật mà khách hàng cần biết về. Ngoài ra, nói chung bạn gửi kết quả của hành động của người dùng chứ không phải là hành động của chính họ. Những thứ có thể được tính toán (vật lý) không cần phải được gửi đi, ngoại trừ các điểm đồng bộ định kỳ để tính toán các lỗi dấu phẩy động tích lũy lỗi theo thời gian và đồng bộ với các hành động người dùng từ xa. Điều này cũng làm cho trò chơi có vẻ tương tác hơn và bao gồm một số phần nói lắp là kết quả từ độ trễ mạng và jitter. Nhược điểm chính của mô hình này là nếu bạn có độ trễ mạng cao hoặc giọt gói, bạn sẽ nhận được hiệu ứng dòng thời gian phân tách khi tính toán vật lý tiếp tục và đột nhiên bạn nhận được bản cập nhật từ người dùng từ xa cho biết họ đã làm gì đó ảnh hưởng đến vật lý mà chúng ta chưa từng thấy. Nhưng đây là một vấn đề tiêu chuẩn trong hầu hết các trò chơi trên mạng và các lựa chọn thay thế là tồi tệ hơn đối với hầu hết các loại trò chơi thời gian thực.

Các vấn đề liên quan