Trong khoảng
Đây thực sự là hai câu hỏi trong một. Trước hết tôi đang tìm cách lưu trữ hiệu quả một lượng lớn dữ liệu gạch. Các khía cạnh khác liên quan đến truy vấn tập dữ liệu và hiển thị gạch. Hãy để tôi cung cấp cho bạn một số nền tảng đầu tiên.
Chúng tôi đang tạo một trò chơi ông trùm nhiều người chơi dựa trên trình duyệt bằng thư viện CraftyJS để kết xuất nó thành Canvas. Trong nền tảng của GUI, chúng tôi đang chạy Yii Framework trên PHP và tất cả đều kết nối với trình tạo bản đồ ngẫu nhiên và công cụ trò chơi Python.
Đây là cách hiển thị bản đồ thô đầu tiên: http://i.imgur.com/khAXtl.png
Lưu trữ dữ liệu bản đồ
Thế giới trò chơi được tạo ngẫu nhiên mỗi khi trò chơi bắt đầu. Kích thước là gạch hình lục giác 100x100 cho mỗi người chơi. Điều đó có nghĩa là đối với một trò chơi ba người chơi, có 90.000 ô được tạo. Hiện tại tôi chỉ tạo một mảng JavaScript từ đó tôi kết xuất bản đồ.
Điều này hoạt động tốt để kết xuất, nhưng đối với bất kỳ loại tương tác nào với bản đồ, chúng tôi cần lưu trữ người chơi nào sở hữu ô đó, loại cấu trúc nào được xây dựng trên nó, giá hiện tại là gì, v.v. Lúc đầu, ít nhất là đối với nguyên mẫu, chúng tôi muốn sử dụng MySQL, nhưng sau một số thử nghiệm, nó không chính xác nhanh như tôi muốn. Có lẽ một kho lưu trữ đối tượng như MongoDB sẽ phù hợp hơn để lưu trữ dữ liệu ô thay vì bảng SQL. Hoặc có thể một cái gì đó khác?
Hiển thị bản đồ
Một vấn đề khác tôi thấy là di chuyển xung quanh bản đồ. Hiện tại tôi đang tạo các thực thể Crafty cho mỗi ô ngay cả khi nó không nằm trong chế độ xem. Điều này là chậm, bởi vì mặc dù Crafty chỉ hiển thị những cái trong chế độ xem, nó lưu trữ và có thể lặp lại qua tất cả các ô trên mỗi sự kiện kết xuất. Những gì tôi hiện đang có là một bản đồ được tạo ra rất chậm để tải và lắp đặt khi bạn di chuyển xung quanh, bây giờ tôi muốn làm cho nó có thể chơi được.
Ý tưởng đầu tiên của tôi là tải tập hợp con được hiển thị của các ô nằm trong khung nhìn. Nhưng khi người chơi sẽ di chuyển khung nhìn sang một khu vực trống, tôi cần truy vấn máy chủ và đợi phản hồi trở lại, chỉ sau đó bản đồ mới có thể được hiển thị. Điều này sẽ ổn trong một ứng dụng gốc, nhưng nó bị lag trong một trò chơi web.
Cách để có được hiệu suất mượt mà từ bản đồ có thể là tải trước một tập hợp con lớn hơn vào một mảng javascript và sử dụng nó làm bộ đệm. Người chơi sẽ có một vài màn hình "được lưu trong bộ nhớ cache" và khi anh ta di chuyển khung nhìn, tôi sẽ tải thêm các ô vào "bộ đệm" của JS.
Tôi đang đi đúng hướng? Tôi rất thích nhận thêm một số thông tin từ một người đã làm điều gì đó tương tự. Tôi mới bắt đầu phát triển trò chơi, nhưng đã trải qua rất nhiều nguồn trong vài tuần qua.