Bạn có hai thứ rất khác nhau để quản lý:
Máy chủ phải quản lý toàn bộ thế giới, theo cách có thẩm quyền. Vì thế, việc liên lạc với N khách hàng (trong đó N là "lớn") là cần thiết.
Về nguyên tắc, khách hàng có thể biết về toàn bộ thế giới, nhưng không cần . Đối với khách hàng, việc biết người chơi gần đó là đủ. Ví dụ, giả sử phân vùng giống như lưới khá thô, chỉ cần biết ô của người chơi và 26 ô xung quanh trình phát (hoặc 8 ô trong trường hợp bạn có lưới 2D). Một lưới tốt hơn một chút là tốt hơn, nhưng bạn có ý tưởng.
Bây giờ, rất nhiều xe bán tải, "rất nhiều" là gì? Bạn có thể đào 5 thứ mỗi giây, đó có thể là hai chục số cần được cập nhật trên máy chủ và máy chủ có thể phải truyền chúng cho một số người chơi khác có khu vực quan tâm chồng lên ô của bạn. Đối với một máy tính, đây là lượng dữ liệu khá vô lý và một lượng tính toán không đáng có. Nó có thể trở thành một thách thức khi có hàng trăm / nghìn người chơi trong cùng một ô (khi đó việc phân nhóm của bạn quá thô thiển).
Máy chủ không cần biết, cũng không quan tâm đến vòng quay của xe bán tải hoặc các chi tiết như vậy. Tại sao nó?
Khách hàng thực sự cũng không quan tâm, vì đây chỉ là trò vui mắt mà khách hàng có thể trang điểm nhanh chóng.
Điều cần thiết từ quan điểm của máy chủ là biết rằng bạn đang đào (30, 40, 50) trong nút bạn đang ở và nó quyết định rằng điều này sinh ra, ví dụ như ba đối tượng loại 5 hoặc một đối tượng loại 7 với tổng số 3. Đó là tất cả những gì nó quan tâm, và đó là tất cả những gì nó nói với bạn. Nó cũng sẽ bao gồm thông tin trong dữ liệu được gửi cho ai đó di chuyển khu vực quan tâm của anh ta qua ô lưới sau đó (giả sử sau đó nó vẫn còn ở đó).
Khách hàng được nói với ba đối tượng sinh ra ở đó, blah blah. Bây giờ, cho dù khách hàng có hiển thị bản đồ nghệ thuật ASCII trong đó giờ là 'D' hay liệu nó có hiển thị một đống bụi bẩn đang quay hay không, tất cả đều giống nhau. Cho dù các cọc có các góc quay khác nhau hay chỉ các cọc gần với trình phát của bạn cũng giống nhau. Nó chỉ là thứ được hiển thị trên màn hình của bạn, nó không ảnh hưởng đến bất kỳ ai khác.
Vì vậy, trong trường hợp cụ thể mà bạn muốn chỉ xoay các đống bụi bẩn gần đó, bạn có thể thực hiện kiểm tra phạm vi trên tất cả các đối tượng bạn biết. Vì tập dữ liệu không lớn, thậm chí vũ phu đối với mọi thứ sẽ hoạt động.
Bạn có thể (và nên) tùy thuộc vào kích thước phân vùng của mình, cắt tỉa các ô lưới quá xa.
Tất nhiên, bạn có thể phân vùng phụ của tế bào của bạn và sử dụng một cái gì đó siêu thông minh. Sử dụng cây kd-Tree nếu bạn muốn, nhưng đừng mong đợi lợi nhuận khổng lồ. Bạn có thể cắt tỉa đồ đạc với Manhattan distace, hoặc bạn có thể sắp xếp đồ đạc của bạn trong một lưới nhỏ của riêng bạn ... nhưng tại sao?
Kiểm tra khoảng cách (khoảng cách thực sự bình phương, nhưng nó giống với bạn) chỉ là hai phép nhân và phép cộng (được tối ưu hóa cho MUL, MADD, do đó thực sự chỉ là hai thao tác), tiếp theo là một nhánh hoặc di chuyển có điều kiện. Đó là khá nhanh như bất kỳ hoạt động khác mà không cắt tỉa toàn bộ các ô lưới tại một thời điểm. Trên thực tế, đây là điều mà bạn thậm chí có thể làm trên GPU ...
Xem cách bạn sẽ có vài trăm hoặc nhiều nhất là vài nghìn kiểm tra khoảng cách so với cùng một vị trí (khoảng cách bình phương hoạt động tốt), bạn thực sự không gặp nhiều khó khăn khi thực hiện phép tính đó, thậm chí nhiều hơn vì nó khá là bộ nhớ cache- lặp đi lặp lại thân thiện trên bộ nhớ tiếp giáp, và với các động thái có điều kiện, nó rất rẻ. Một cái gì đó như (mã giả) rot = r[i] + 1; r[i] = ((dx*dx+dy*dy) < DIST_SQ) ? rot : r[i];
. Đó là một lần lặp trên một mảng vài trăm giá trị trên mỗi khung. Máy tính không quan tâm đến việc thực hiện điều đó, đó là tải và lưu trữ liền kề, ALU đơn giản, không có chi nhánh và chỉ vài nghìn lần lặp.
Điều này (nhiều-một) không phải là cùng một loại vấn đề (nhiều-nhiều) như trên máy chủ. Thực sự, khách hàng không phải là vấn đề.
minecraft:dirt
) và số đếm (30), để khi người chơi đủ gần để nhặt nó, nó chỉ cần thêm càng nhiều số lượng có thể vào kho của người chơi. Nếu người chơi chỉ có đủ chỗ cho 6 vật phẩm và một chồng 30 trên mặt đất, người chơi sẽ nhặt được 6 vật phẩm và số lượng trên mặt đất được giảm xuống còn 24.