Tôi đang cố gắng thực hiện phát hiện xung đột liên tục đơn giản cho trò chơi pong của tôi tuy nhiên tôi không chắc chắn tôi đang thực hiện hoặc hiểu quyền này. AFAIR liên tục phát hiện va chạm được sử dụng cho các đối tượng chuyển động nhanh có thể đi qua một đối tượng khác phá vỡ phát hiện va chạm bình thường. Vì vậy, những gì tôi đã cố gắng là bởi vì đối tượng chuyển động nhanh duy nhất tôi có là một quả bóng, tôi chỉ cần vị trí của quả bóng, tốc độ di chuyển của nó, và vị trí của vật thể mà chúng ta so sánh với. Tôi có thể làm được điều đó. Từ đây tôi đã hình dung rằng tốt nhất là ví dụ nếu tốc độ di chuyển của quả bóng cho biết nó đang di chuyển sang trái, tôi sẽ so sánh nó bị ràng buộc trái nhất với giới hạn bên phải nhất của đối tượng kia. Từ điều này tôi sẽ bước qua bằng cách thêm tốc độ di chuyển đến giới hạn trái nhất của quả bóng và so sánh để chắc chắn rằng nó lớn hơn các đối tượng khác phải ràng buộc. Điều này sẽ cho thấy rằng không có va chạm bên phải trái.Phát hiện va chạm liên tục 2D
Tôi có một số thứ có phần hoạt động, nhưng không may, quả bóng bắt đầu nảy lên bình thường trong một thời gian rồi nó hoạt động như thể nó chạm vào mái chèo khi không có gì ở đó.
Tôi bị mất một chút, mọi trợ giúp sẽ được đánh giá cao!
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;
}
}
Oh bạn đã đúng! Tôi đã làm việc này quá lâu. Tôi quên tác dụng phụ của việc không kiểm tra kích thước Y. – RedShft