あたり判定の質問2
Rinifisu 2014/05/28(Wed) 08:32
Reputeless 2014/05/28(Wed) 15:27
枠のあたり判定は提供していないので、工夫して求めます。
たいていは複数のあたり判定の組み合わせで解決します。
例えば円の枠と別の円とのあたり判定は
(外側の円に接触) && !(内側の円に含まれない) で求められます。
サンプル
# include <Siv3D.hpp>
bool IntersectCircleFrame(const Circle& circle, double thickness, const Circle& other)
{
return circle.stretched(thickness).intersects(other) && !circle.contains(other);
}
void Main()
{
const Circle circle(Window::Center(), 100);
while (System::Update())
{
const Circle player(Mouse::Pos(), 5);
const bool intersect = IntersectCircleFrame(circle, 20, player);
circle.drawFrame(0, 20, intersect ? Palette::Red : Palette::White);
player.draw();
}
}
このコードで使われている "contains" に対応した図形は多くないので、
必要な場合は自前で代替の実装をしてください。
Rinifisu 2014/05/29(Thu) 18:32
Circle Player(X, Y, Z);
Circle EnemyFrame(A, B, C);
Circle Enemy(A, B, C - N);
EnemyFrame.draw(N, 0);
if(EnemyFrame.intersects(Player) && !Enemy.contains(Player))
{
}
できました。
ありがとうございます。