私は卓球用の単純な連続衝突検出を実装しようとしていますが、私はこの権利を実装しているか理解しているかどうかはわかりません。 AFAIR連続衝突検出は、通常の衝突検出を回避する別のオブジェクトを通過する可能性がある高速移動オブジェクトに使用されます。2D連続衝突検出
私が試したのは、私が持っている唯一の速い動く物体はボールだから、私はボールの位置、その移動速度、そして比較している物体の位置が必要だからです。
ボールの移動速度が左に移動していることが示されている場合などは、他のオブジェクトの一番右の境界と一番左の境界を比較します。これからボールの左端に移動速度を加え、それが他のオブジェクトの右端よりも大きいかどうかを比較することで、私はステップバイステップを進めます。これは、右の衝突がないことを示す。
私はややうまく機能していますが、残念ながらボールはしばらくの間バウンスを開始し、何もないときにパドルを叩くように動作します。
私は少し失われています、どんな助けもありがとう!
static bool CheckContinuousCollision(PActor ball, PRect ballRect, PActor other, PRect otherRect)
{
PVector ballMoveSpeed;
int ballXLimit;
int ballYLimit;
ballMoveSpeed = ball.moveSpeed;
// We are moving left
if (sgn(ball.moveSpeed.x) < 0)
{
ballXLimit = std.math.abs(ballMoveSpeed.x)/2;
for (int i = 0; i <= ballXLimit; i++)
{
if (ballRect.Left < otherRect.Right && otherRect.Left < ballRect.Left)
{
return true;
}
ballRect.Left -= i;
}
}
//We are moving right
if (sgn(ball.moveSpeed.x) > 0)
{
ballXLimit = std.math.abs(ballMoveSpeed.x)/2;
for (int i = 0; i < ballXLimit; i ++)
{
if (ballRect.Right > otherRect.Left && ballRect.Right < otherRect.Right)
{
return true;
}
ballRect.Right += i;
}
}
// we are not moving
if (sgn(ball.moveSpeed.x) == 0)
{
return false;
}
}
ああ、そうですよ!私はこれについてあまりにも長い間取り組んできました。私はY次元をチェックしないという副作用を忘れてしまった。 – RedShft