私はこれを解決するために懸命に探していました - だから私は本当に助けを求める必要があります.
六角形のタイルの形で DIV をオーバーレイする CSS ベースのゲーム マップを作成しました (テーブル トップ ゲームなど)。現在アクティブなタイルに隣接しているタイルを見つけようとしています。
マップの ID を左上から右下に順番に生成し、各タイルに座標を割り当てることができました。そこから、ピタゴラスの定理を使用して、2 つの X&Y 座標間の距離を計算しました (これを理解するのに時間がかかりました)。物事は実際には非常に近いですが、問題は、16 進タイル マップが本質的に「ずれている」ため (たとえば、正方形のグリッドではなく、隣接する 2 つのタイルがまったく同じ水平線上にない)、距離を計算すると、いくつかのタイルがずれることです。実際には 2 歩離れているため、隣接するタイルよりも近くなるように計算します。
私が何を話しているかを正確に理解できるように、私が構築したもののデモを公開しました。
http://www.pitashi.com/map/index.php
任意のタイルをクリックすると、ページが更新され、「現在の場所」にフラグが立てられます。次に、各タイルに現在の場所からの座標と計算された距離が表示されます。周りをクリックすると、現在の場所に接していない多くのタイルの距離が近くなっていることがわかります。
コード:
// load the map DIV tags (90 tiles)
if (isset($_GET['x'])) {
$gl_map_x = $_GET['x'];
} else $gl_map_x = 0;
if (isset($_GET['y'])) {
$gl_map_y = $_GET['y'];
} else $gl_map_y = 0;
if (isset($_GET['mapid'])) {
$gl_map_id = $_GET['mapid'];
} else $gl_map_id = 42;
$i = 1;
$x = 0;
$y = 0;
while ($i <= 90) {
echo "<div class='hexagon hexagon" . $i . "' onclick=\"window.location=('index.php?mapid=". $i . "&x=" . $x . "&y=" . $y . "')\"><div class='hexagon-in1'>";
echo "<div class='hexagon-in2'>";
if ($i == $gl_map_id) {
echo "<img class='hexstar" . $i . "' src='images/map_star1.png' />";
}
$distance = round(sqrt(pow($gl_map_x - $x, 2) + pow($gl_map_y - $y, 2)), 2);
echo "<div style='color:#ffffff; padding-left:48px; padding-top:30px;'>" . $x . ", " . $y . "<br />" . $distance . "</div>";
//echo "<div style='color:#ffffff; font-weight:bold; padding-left:48px; padding-top:30px;'>" . $distance . "</div>";
//echo "<div style='color:#ffffff; padding-left:48px; padding-top:30px;'>" . $i . "</div>";
echo "</div></div></div>";
$i++;
$x = $x + 63;
if ($x > 756) {
$x = 63;
$y = $y + 54;
} elseif ($y == 432) {
$x = $x + 63;
}
}
?>
タイルのよろめきを補正するために使用する必要がある追加の数学があるに違いないことはわかっていますが、これについては給与等級をはるかに超えています. しかし、この機能は私の小さな RPG ゲームには不可欠です。
助言がありますか?