私は何年もの間 Web 開発を行ってきましたが、ゆっくりとゲーム開発に関与するようになりました。現在のプロジェクトでは、このアイソメトリック マップがあり、アルゴリズムを使用してどのフィールドがクリックされているかを検出する必要があります。ちなみに、これはすべてJavascriptを使用したブラウザにあります。
マップこの
ように見えます。フィールド (タイル) の構造とそれらの ID を示すためにいくつかの数字を追加しました。すべてのフィールドには中心点 (x、y の配列) があり、描画時の 4 つのコーナーの基になります。
ご覧のとおり、これはひし形ではなく、ジグザグ マップであり、角度がありません (上から見た図)。これが、すべての記事と計算が通常ひし形に基づいていることを考えると、自分で答えを見つけることができない理由です。角度付き。
数字
これはダイナミック マップであり、すべてのサイズと数字を変更して新しいマップを生成できます。
大量のデータではないことはわかっていますが、マップはマップとフィールド サイズに基づいて生成されます。
- マップ サイズ: x:800 y:400
- フィールド サイズ: 80x80 (コーナー間)
- すべてのフィールドの中心位置 (x,y)
目標
特定のイベント (クリック、移動など) でマウスがどのフィールドにあるかをクライアント (ゲーム) に伝えるアルゴリズムを考え出すこと。
免責事項
私はすでに自分で実用的な解決策を思いついたことを述べたいと思いますが、より良い方法でそれを書くことができると100%確信しています(私の解決策にはネストされたif文とループがたくさん含まれています)、そしてそれが私がここで尋ねる理由です。
これは私の解決策の例です。基本的に、最も近い4つの既知の位置にコーナーがある正方形を見つけ、次に最も近い2つのフィールド間の最小の正方形に基づいて結果を取得します。それは意味がありますか?
私が何かを逃したかどうか尋ねてください。