Thực hiện nhiều người chơi, tôi có thể thực hiện nó sau nếu tôi chọn không?


15

Tôi dự định sử dụng XNA để xây dựng một dự án trò chơi. Tôi không hoàn toàn chắc chắn vào lúc này nếu tôi muốn thêm chức năng nhiều người chơi hay không, vì tôi có rất nhiều vấn đề khác cần giải quyết mà tôi vẫn còn mới. Tôi không muốn dự án nhất thiết phải ra khỏi tầm tay.

Câu hỏi của tôi là, nếu tôi đi vào dự án của mình mà không có kế hoạch thêm hỗ trợ nhiều người chơi, có dễ dàng đi ngược lại không (thường là không) và thêm mã cần thiết để bắt một trò chơi nhiều người chơi?

Câu trả lời:


24

Dưới đây là lời khuyên âm thanh được lấy từ hướng dẫn thư viện mạng Zoidcom :

Nếu dự án của bạn đang trong giai đoạn lập kế hoạch, bạn nên thiết kế dự án để kết nối mạng ngay từ đầu. Việc sử dụng mã mạng trong trạng thái muộn của dự án rất có thể sẽ dẫn đến việc tái cấu trúc lớn hoặc một số lượng lớn các vụ hack, dẫn đến mã lỗi khó bảo trì và lỗi.

Cách sạch nhất là thực hiện toàn bộ trò chơi như thể đó là một trò chơi mạng thuần túy. Đó là, triển khai mã cho một máy chủ chuyên dụng và triển khai mã này chỉ là mã máy chủ. Thực hiện mã máy khách trò chơi theo cách tương tự. Máy chủ và máy khách có thể chạy trong cùng một quy trình và thậm chí không cần sử dụng ổ cắm mạng thực sự, nhưng chúng phải là các thực thể riêng biệt và tất cả các mã phải được thiết kế để hoạt động theo cách đó. Khi người chơi nhảy, đừng trực tiếp thay đổi vectơ nhảy của người chơi, nhưng hãy gửi gói 'jump-key-press' đến máy chủ và để máy chủ xử lý việc đó.

Điều này có nghĩa là ngay cả trong một trò chơi đơn, có một máy chủ vô hình đang chạy trong nền. Một phiên bản nhiều người chơi của cùng một trò chơi chỉ cần kết nối với một máy chủ từ xa thay vì một phiên bản cục bộ et voila, nhiều người chơi đã hoàn thành. Ưu điểm của việc này là:

không có mã riêng cho mã đơn và nhiều người chơi, mã mạng được kiểm tra và phát triển trong toàn bộ mã sạch dự án

Các dự án sử dụng sơ đồ này là hầu hết tất cả các trò chơi sử dụng bất kỳ công cụ Quake, Civilization 4, Neverwinter Nights và nhiều trò chơi khác.

Để kết nối máy khách và máy chủ trong cùng một quy trình với độ trễ bằng không, có thể sử dụng ổ cắm cục bộ. Chúng được Zoidcom cung cấp và chuyển các gói trực tiếp từ một ZCom_Control sang một gói khác mà không cần thông qua một ổ cắm cấp hệ điều hành.


Có vẻ như đây là một thiết lập cho quyền máy chủ thuần túy mà tôi ghét. Nếu ping của bạn đến máy chủ thấp, nó sẽ chơi tốt. Nhưng khi ping quá cao, các hành động trên màn hình của bạn sẽ bị trì hoãn. Tôi rất thích phương thức mà công cụ nguồn sử dụng, máy khách chạy vật lý và mọi thứ cục bộ và mọi hành động ngay lập tức xuất hiện, nhưng máy chủ vẫn kiểm tra để đảm bảo mọi người không bị hack và nếu có bất kỳ sự mâu thuẫn nào xảy ra , máy chủ gửi trạng thái chính xác cho người chơi và ghi đè mô phỏng máy khách với dữ liệu mới.
Tấn

8
@AttackingHobo: Bạn chỉ mô tả dự đoán của khách hàng. Bạn có thể có dự đoán máy khách và quyền máy chủ cùng tốt, và nó không loại trừ kiến ​​trúc được mô tả trong hướng dẫn sử dụng Zoidcom.

@AttackingHobo @Joe: Và Zoidcom thực sự hỗ trợ dự đoán phía khách hàng ^^
Leftium

2

Tôi đồng ý với lời khuyên được trích dẫn trong câu trả lời của Leftium; thiết kế nó để kết nối mạng ngay từ đầu, vì bạn sẽ không thể thêm nó sau .

Lần đầu tiên tôi thử làm một trò chơi nhiều người chơi (tôi thậm chí không cố gắng tạo một trò chơi một người chơi!), Tôi hình dung rằng trước tiên tôi sẽ làm cho trò chơi hoạt động và sau đó thêm kết nối mạng. Ý kiến ​​tồi. Tôi bị bỏ lại với một nguyên mẫu của một trò chơi một người chơi thực sự nhàm chán và không biết làm thế nào để biến nó thành một trò chơi nhiều người chơi. Tôi đã loại bỏ nó hoàn toàn và bắt đầu lại, lần này viết mã mạng nhiều người chơi ngay từ đầu. Mọi thứ đã được nhấp.

Tôi chắc chắn không thể bắt đầu với trò chơi một người chơi và thêm chức năng nhiều người chơi. Nếu bạn nghĩ thông suốt, lập kế hoạch chính xác và chắc chắn rằng bạn biết chiến lược của mình thì chắc chắn, hãy thử xem. Tôi nghĩ rằng nó sẽ là một câu đố thú vị để giải quyết ít nhất. Nhưng thực sự chắc chắn rằng bạn biết kế hoạch của mình về cách bạn sẽ thêm mạng.

Tôi nghĩ rằng có một nền tảng trung gian (mặc dù tôi chưa bao giờ thử nó). Bạn có thể viết một số lớp giả cho các tính năng kết nối / nhiều người chơi và siêng năng sử dụng chúng khi bạn đang viết trò chơi một người chơi. Sau đó, nếu bạn quyết định triển khai nhiều người chơi, chỉ cần điền vào các lớp giả và bạn sẽ hoàn thành mọi cách. Điều này tiếp cận rất nhiều với phương thức máy chủ / máy khách, nhưng bạn có thể thoát khỏi công việc ít hơn; Rốt cuộc, một trò chơi một người chơi dễ làm hơn một trò chơi nhiều người chơi, vì vậy nếu bạn định viết trò chơi một người chơi của mình như một trò chơi nhiều người chơi thì tại sao bạn không làm cho nó nhiều người chơ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.