DistanceBasedCollision (日本語)

衝突検出を行うための別の方法です。この種類は完全に円弧にて動作します。 別方向にある単体オブジェクトの距離がそれらの合計未満かどうかを確認します (複数の半径)。

変数定義 : ax, ay = circleA の中心座標。 bx, by = circleB の中心座標。 ar, br = それぞれ CircleA および circleB の円弧

function checkCircularCollision(ax, ay, bx, by, ar, br)
	local dx = bx - ax
	local dy = by - ay
	local dist = math.sqrt(dx * dx + dy * dy)
	return dist < ar + br
end

余計な平方根関数は不要ですか? この他の関数を試してみてください

function checkCircularCollision(ax, ay, bx, by, ar, br)
	local dx = bx - ax
	local dy = by - ay
	return dx^2 + dy^2 < (ar + br)^2
end

距離にて処理を行われることがわかっている sqrt 関数を保持します。

高負荷の平方根を回避するため、第二番目が高速であると思われるのに対して、第二番目のバージョンにある 3 つの二条ではなく、一つはまだ関数であることに注意してください。それはそうとして、 Löve は LuaJIT を使用しており、本当に最適化を行う必要がある場合は、どちらが高速であるか調査を行ってください。


そのほかの言語