これはちょっと変わった方法ですが、潜在的に(理論的には、非結合ストレージスペースで)無限に私を襲っただけです。
現在ロードされているボードのチャンクを保存する必要があります。これは、一種の一意のIDとして与えられます。チャンクとそのデータは、次の列を持つテーブルにする必要があります。チャンクの
- チャンクID
- チャンクデータ
- IDを北に東の南
- IDの
- IDを
- あなたはおそらくjQueryのOを使用して、キャンバスをドラッグ可能にする必要があり
西
のID r同様(this questionにはいくつかの情報があります)。
ドラッグするキャンバスのイベントリスナーを作成し、移動する距離を追跡します。リリース時に、キャンバスが別のチャンクに変更されていない場合は、何もしないでください。
キャンバスが現在のチャンクを残している場合は、格納されたIDを使用して、次にロードするチャンクを見つけます。 IDが0の場合、チャンクはまだ存在しないと想定して作成します。それ以外の場合は、チャンクをロードして、既存のチャンクを置き換えます。キャンバスを中央に戻します。
十分なIDと十分な記憶領域があれば、座標系が使用されていないので、無限のキャンバスが得られます。また、エッジをラップするか、ワームホールを作成することもできます。
これを実装する方法はわかりませんが、キャンバスの移動距離を追跡するだけで済みます。 Googleマップは似たようなものなので、それらの処理方法を見ていきます(私はまもなくそうして、この回答に実装の詳細を追加できるかどうかを確認します)。
これは最も実用的で簡単な方法ではないかもしれませんが、それは思いがけない面白いことでした。
編集:私はこれが基本的な機能のラインに沿っていると信じて: http://candrews.net/blog/2010/10/introducing-sprymap/ それは軽量ドラッグjavascriptのマップです。あなたは単にそれまでの距離を追跡するだけです。
あなたはそれがない正しく、無限大にすることはできません、とあなたはあなたの座標系の限界を打つ終わるだろうとばかり、の方向に次のチャンクをロードする必要はありません。あなたがしたいことは、キャンバスを常に見直して、その中心がロードされた領域の端に達したときに新しいチャンクを読み込むことです。 – ssube
私が意味することは、あなたがスクロールするほど、それが大きくなることです。もちろん、私は限界を一応設定する必要がありますが、私が設定した規模の大きさになるようなものが欲しいです。 – sdfadfaasd
可能な複製[キャンバスを無限にする](http://stackoverflow.com/questions/38589304/make-a-canvas-infinite) – bummi