Để bắt đầu, tôi có một nền tảng tốt về mạng (phần cứng, bộ định tuyến, ví dụ) nhưng rất ít kiến thức về những điều cơ bản của lập trình mạng. Điều này có vẻ như là một câu hỏi ngu ngốc, nhưng tôi muốn biết những gì tôi đang nhận được trong khi thực hiện nhiều người chơi trong trò chơi của tôi.
Tôi đang tạo một thế giới dựa trên gạch, được tạo thông qua một mảng 2D đơn giản. Hãy nói điều gì đó như Thế giới [100] [100], vì đơn giản.
Hiện tại, phương thức kết xuất chỉ hiển thị các ô dựa trên độ phân giải của cửa sổ, cộng với một ô (để hiển thị mượt mà trong quá trình di chuyển.) Cho dù thế giới có lớn đến đâu, (10 x 10, 1 triệu x 1 triệu) thì kết xuất hoàn hảo.
Trò chơi không cần gì nhiều hơn để biết những gì hiện có thể nhìn thấy (được hiển thị trên màn hình +1) và ở một số thông tin có thể nhất của các ô trong một khu vực xung quanh người chơi.
Vì vậy, bất cứ điều gì nữa được gửi bởi Máy chủ sẽ không phải là thông tin đầy đủ. Ví dụ. Các vật phẩm nằm trên mặt đất, loại mặt đất, cây cối, v.v. sẽ không quan trọng trong khu vực bên ngoài tầm nhìn của người chơi, nhưng sẽ chỉ là những gì Khách hàng / Người chơi cần biết về các ô đó. (Ví dụ: 'tên đến' của Ultima Online nơi người chơi có thể biết một Nhân vật [người chơi hoặc quái vật] nằm ngoài các ô trong chế độ xem được hiển thị của họ.)
Tôi không biết nhiều về mạng, vì vậy có lẽ khi tôi học được điều này có thể trả lời câu hỏi của tôi. Tuy nhiên, tôi tò mò liệu đây là một giải pháp khả thi hay ý tưởng đơn giản là buồn cười.
Thông tin được gửi sẽ có diện tích khoảng 10,515 ô và mỗi ô chứa thông tin về những gì trên ô. Hiệu quả hơn, mọi thứ sẽ là một Object, trong đó ô chứa tất cả các Đối tượng trên ô. Ví dụ. Ngói [4] [4] giữ Kiếm # 23452, Rock2, Tree5, Player3, Monster4.
Các ô trống sẽ không gửi gì nhiều hơn loại địa hình [Cỏ, cát, nước] nếu chưa được tải trong quá trình Khởi tạo / Tải. Một số gạch sẽ có một số đối tượng [Tree2, Sword # 924, Gold, Corpse, Rock3].
Vì vậy, tôi không thể tưởng tượng rằng một ô sẽ có rất nhiều thông tin để gửi cho Máy khách từ Máy chủ, vì Khách hàng chủ yếu chỉ cần biết Texture cần được tải và Vị trí để đặt nó trên màn hình. Vị trí chỉ là hai số nguyên và Texture là một số nguyên cho một danh sách các tệp để báo cho khách hàng kết xuất.
Trong lúc điên rồ nhất, Máy chủ sẽ phải gửi 150 ô với thông tin chỉ một số đối tượng OnLOAD và từ đó, cập nhật chỉ thay đổi thành các ô (nếu có) và bất kỳ ô mới nào (10 đến 15 mỗi khi người chơi di chuyển theo hướng ) và hướng chuyển động cho các ký tự trên màn hình (để khách hàng có thể mô phỏng chuyển động mượt mà giữa các ô).
Tôi cho rằng tôi đúng khi nghĩ rằng đây là một lượng thông tin cực kỳ thấp được gửi qua internet hoặc giữa các đồng nghiệp, vì vậy nó có vấn đề gì với hiệu suất ngay cả khi kết nối bị lag? Hay tôi không biết gì về mạng đến nỗi đầu óc tôi sẽ bị thổi bay khi cuối cùng tôi cũng có thể mở cuốn sách của mình trên mạng nhiều người chơi?
Nếu đó là một lượng thông tin rất thấp được gửi giữa Máy khách / Máy chủ, thì việc tải toàn bộ Thế giới vào Khởi tạo có ý nghĩa hơn không? Hoặc 'Bản đồ' nếu Thế giới quá rộng lớn. Và sau khi LOAD, chỉ gửi các ô được cập nhật?
Tôi vẫn đang cân nhắc làm thế nào tôi nên xử lý dữ liệu cụ thể. Cuốn sách tôi đang sử dụng làm tài liệu tham khảo muốn tôi có Danh sách liên kết, nơi tôi thêm và xóa các đối tượng, vì vậy mọi thứ đều là một bool. "Có nhân vật không? Có cây không?"
Tôi đã nghĩ đến một cách tiếp cận khác, chẳng hạn như một thùng chứa các đối tượng và logic Máy chủ chỉ gửi những gì được yêu cầu để cho Khách hàng biết những gì cần kết xuất. Có thể với các đối tượng chứa thông tin mạng trong chính nó, được gửi ra khi được Máy chủ yêu cầu.