Đây là một phương pháp độc đáo một chút, nhưng chỉ đánh tôi là có khả năng (về lý thuyết, với không gian lưu trữ không giới hạn) vô hạn.
Bạn sẽ cần phải lưu trữ một đoạn được tải hiện tại của bảng, được cung cấp dưới dạng ID duy nhất của một số loại. Các khối và dữ liệu của họ cần phải được trong một bảng với các cột sau:
- Chunk ID
- Chunk liệu
- ID của đoạn phía bắc
- ID của nam
- ID của đông
- ID của miền tây
Bạn cần làm cho canvas có thể kéo được, có thể bằng cách sử dụng jQuery o r tương tự (this question có một số thông tin về điều đó).
Bây giờ, hãy tạo trình xử lý sự kiện để canvas được kéo và theo dõi khoảng cách di chuyển. Khi được phát hành, nếu canvas không thay đổi thành một đoạn khác, không làm gì cả.
Nếu canvas đã rời khỏi đoạn hiện tại, hãy sử dụng ID đã lưu để tìm đoạn tiếp theo cần tải. Nếu ID là 0, giả sử đoạn đó chưa tồn tại và tạo nó. Nếu không, hãy tải đoạn, thay thế đoạn hiện có. Đặt canvas trở lại căn giữa.
Với ID đủ dài và đủ dung lượng lưu trữ, điều này sẽ cung cấp cho bạn canvas vô hạn vì không có hệ thống tọa độ nào được sử dụng. Nó cũng cho phép gói các cạnh, hoặc tạo các lỗ sâu.
Cách triển khai, tôi không chắc lắm, nhưng bạn chỉ cần theo dõi mức độ di chuyển của canvas. Google Maps làm điều gì đó tương tự, vì vậy tôi sẽ xem xét cách họ xử lý nó (Tôi sẽ làm như vậy ngay và xem liệu tôi có thể thêm một số chi tiết triển khai vào câu trả lời này) hay không.
Đây có thể không phải là phương pháp thực tế nhất hoặc đơn giản nhất, nhưng thật thú vị khi nghĩ ra.
Edit: Tôi tin rằng đây là dọc theo dòng của các chức năng cơ bản: http://candrews.net/blog/2010/10/introducing-sprymap/ Đó là một trọng lượng nhẹ có thể kéo bản đồ javascript. Bạn chỉ cần theo dõi cách xa, sau đó.
Bạn không thể có nó là vô hạn, không đúng cách, và bạn không muốn chỉ tải các đoạn tiếp theo theo một hướng, như bạn sẽ kết thúc đánh các giới hạn của hệ tọa độ của bạn. Những gì bạn muốn làm là liên tục recenter vải và theo dõi đó, tải khối mới khi trung tâm đạt đến các cạnh của khu vực được nạp. – ssube
Điều tôi muốn nói là bạn càng di chuyển, nó càng lớn. Tất nhiên tôi sẽ cần phải thiết lập một giới hạn EVENTUALLY, nhưng tôi muốn một cái gì đó mà có được quy mô lớn như tôi đặt nó. – sdfadfaasd
Có thể trùng lặp của [Tạo một canvas vô hạn] (http://stackoverflow.com/questions/38589304/make-a-canvas-infinite) – bummi