Điều gì có liên quan đến việc tạo ra một trò chơi platformer nhiều người chơi thời gian thực?


13

Tôi đang tạo một trò chơi platformer có tính năng "hợp tác" mà tôi muốn làm việc qua mạng / internet.

Bây giờ tôi đã đọc về lập trình trò chơi mạng, bao gồm các bài viết như Mọi người lập trình viên cần biết gì về mạng trò chơi và vì vậy tôi hiểu sự khác biệt giữa các kỹ thuật như khóa ngang hàng và Kiến trúc dự đoán Máy chủ-Khách hàng:

  • Tôi đã kết luận rằng đối với bất kỳ trò chơi thời gian thực nào sẽ được chơi qua internet, khóa ngang hàng đơn giản không phải là một lựa chọn.
  • Tôi cũng lo ngại rằng ngay cả đối với một người chơi platformer, một kiến ​​trúc máy khách-máy chủ đơn giản (không có một số dự đoán của khách hàng) sẽ dẫn đến việc chơi trò chơi bị xuống cấp do sự chậm trễ giữa hành động và phản ứng gây ra bởi một chuyến đi khứ hồi đến máy chủ. (Đã nói rằng tôi muốn loại bỏ sự cần thiết của một máy chủ trung tâm, và vì vậy chỉ có một trong những người chơi, khách hàng, sẽ thực sự gặp phải sự chậm trễ này).

Điều này để lại dự đoán của khách hàng, nhưng ngay cả đối với một trò chơi đơn giản như platformer thì điều này vẫn nghe khá phức tạp.

Làm thế nào tôi có thể tạo ra một hệ thống dự đoán khách hàng đang hoạt động cho một trò chơi platformer nhiều người chơi?


1
Một điều mà bạn sẽ bớt lo lắng hơn trong một trò chơi hợp tác là gian lận;)
Jonathan Connell

Tôi đánh dấu điều này là không mang tính xây dựng. Các câu hỏi được đặt ra ("Làm thế nào nhiều công việc để viết một trò chơi nối mạng có dự đoán khách hàng? Tôi sẽ kết thúc với một nửa cơ sở mã của tôi bao gồm mã mạng?") Quá rộng và không có vấn đề gì cả. Câu trả lời về cơ bản sẽ là "nó phụ thuộc", đó không phải là một câu trả lời hay.
TravisG

-1, "Bao nhiêu công việc" là chủ quan.
Tetrad

1
Bao nhiêu công việc, không chủ quan vì nó đứng một mình nhưng nó phụ thuộc vào một vài yếu tố (quy mô của trò chơi, yêu cầu độ chính xác, v.v.) những yếu tố đó có thể ảnh hưởng nếu nhiều công việc, một công việc nhỏ hoặc ở đâu đó ở giữa (mặc dù những gì loại của tác phẩm là một câu hỏi tốt hơn); tuy nhiên, tôi nghĩ rằng OP thực sự đang hỏi cần bao nhiêu nỗ lực và một phần lớn của cơ sở mã loại mã này sẽ như thế nào. Như đã nói, nó có thể quá rộng. Tôi đã chọn một cách giải thích hẹp hơn và trả lời rằng. Tôi nghĩ rằng OP nên nỗ lực hơn một chút để thu hẹp các câu hỏi xuống một vài điểm rất cụ thể.
Nate

@Tetrad Xin lỗi - Tôi đã cố gắng hết sức để biến câu hỏi này thành khách quan nhất có thể, nhưng câu hỏi của tôi làm tôi khó hiểu là "có khó để tạo ra một hệ thống dự đoán khách hàng đang làm việc cho một trò chơi loại Y" - nếu không thì tôi sẽ học như tôi đi, nhưng thời gian của tôi bị hạn chế nên việc học quá nhiều công việc sau X ngày chơi là quá muộn. Tôi sẽ thử và cung cấp thêm chi tiết về Y, nhưng tôi không muốn đặt câu hỏi "quá cục bộ". Vấn đề chính ở đây là phong trào, phổ biến cho tất cả các nền tảng (tôi muốn người khác thấy câu hỏi này hữu ích). Nếu tôi có thể cải thiện câu hỏi này thì đề xuất được đánh giá cao.
Justin

Câu trả lời:


5

Tôi không nghĩ rằng một nửa cơ sở mã của bạn sẽ biến thành mã mạng nếu bạn quyết định triển khai một tính năng như thế này.

Theo tôi, cách đơn giản nhất để làm điều này là thiết lập máy chủ "trung tâm" (ngay cả khi điều đó có nghĩa là một người chơi "lưu trữ" trò chơi và sau đó kết nối với máy chủ của chính mình) chấp nhận tất cả đầu vào của người dùng nhanh nhất có thể và gửi lại cho mỗi khách hàng.

Trên máy khách, bạn thực hiện điều này không khác gì so với khi bạn đang chơi trò chơi co-op cho hai người chơi cục bộ, ngoại trừ bạn đọc P1 từ bàn phím và P2 từ mạng.

Bạn sẽ cần yêu cầu máy chủ gửi trạng thái trò chơi đầy đủ mỗi lần và cả hai máy khách có thể chuyển sang trạng thái ủy quyền mới từ máy chủ hoặc chúng có thể trượt sang trạng thái mới (trong vài giây). Trừ khi bạn bị mất gói khủng khiếp hoặc hàng tấn khách hàng trên mỗi máy chủ, phương pháp này sẽ đủ cho tình huống bạn phác thảo.


Cách tiếp cận dễ dàng như cách tiếp cận Máy khách (ngoại trừ một máy khách lưu trữ máy chủ -> bạn không cần máy chủ chuyên dụng nhưng bạn phải sử dụng một dòng nào đó UDP + NAT Punch phiên bản cần máy chủ được khấu trừ). Thứ hai, bạn đề xuất phương thức khóa (như bạn đang nói về việc gửi các trò chơi hoàn chỉnh), đây không phải là IMHO, phương pháp tốt nhất nếu trò chơi chạy qua internet (có lẽ là qua mạng LAN), nơi máy khách-máy chủ dễ dàng hơn nhiều thực hiện.
Valmond

1
Không, tôi đề nghị thỉnh thoảng bạn gửi trạng thái trò chơi đầy đủ, vì vậy khách hàng có thể đảm bảo rằng nó không quá xa.
Nate

2

Tôi có một trò chơi theo phong cách mMORPG đầy đủ chức năng với dự đoán của khách hàng (trò chơi chưa kết thúc nhưng nó chạy 'OK') và tôi có một cái gì đó cùng với 40.000 dòng mã cho máy chủ và gấp đôi cho máy khách (thêm số lượng tương tự cho các công cụ, v.v. .). Dự đoán có thể không quá vài trăm dòng (thậm chí là như vậy) và toàn bộ phần mạng có vài nghìn dòng nhưng không quá 5.000 (nó phụ thuộc một chút vào nơi bạn vẽ đường đó).

Câu hỏi mờ câu trả lời mờ ;-)


2

Một tỷ lệ đáng kể của mã mạng có thể độc lập với trò chơi mà bạn đang chơi. Do đó, và vì bạn chưa quen với mạng, điều đầu tiên tôi khuyên bạn nên làm là tìm các thư viện sẽ làm việc đó cho bạn. RakNet chẳng hạn.

Một điều bạn sẽ muốn trong mã trò chơi của mình là khả năng xử lý nhiều trạng thái trò chơi khác nhau, mà bạn có thể sử dụng để nội suy và dự đoán. Điều đó khá đơn giản để thiết kế ở phía trước, nhưng có thể là một khối lượng công việc đáng kể nếu bạn sửa đổi một trò chơi một người chơi hiện có.

Cũng lưu ý rằng nếu bạn muốn người lạ chơi trò chơi ngang hàng qua internet, có lẽ bạn sẽ cần ít nhất một máy chủ ở đâu đó xử lý tiền sảnh / mai mối.

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.