我被一个朋友挑战去做一个破砖游戏,但是我无法弄清碰撞错误。我已经尝试了包括矢量数学在内的所有方法(我不擅长)来使球弹起。 如果球不反弹,我附加的函数将返回0, 如果将在x方向上反弹,则为1(speedX * = -1) 2是否会沿y方向反弹(speedY * = -1)
我正在使用处理和ellipseMode(center)
int intersects(Tile tile) {
float absSpeedX = abs(speedX);
float absSpeedY = abs(speedY);
if (tile.empty) {
return 0;
}
// tile hit from bottom
if (tile.x < x + speedX && x + speedX < tile.x + brickWidth) {
// TOP COLLISION
if (tile.y < y + radius + absSpeedY && y - radius + absSpeedY < tile.y) {
return 2;
}
// BOTTOM COLLISION
if (y - radius + absSpeedY < tile.y + brickHeight - 1 && tile.y + brickHeight - 1 < y + radius + absSpeedY) {
return 2;
}
}
if (tile.y < y + speedY && y + speedY < tile.y + brickHeight - 1) {
// LEFT COLLISION
if (x - radius + absSpeedX < tile.x && x + radius + absSpeedX > tile.x) {
return 1;
}
// RIGHT COLLISION
if (x - radius + absSpeedX < tile.x + brickWidth -1 && tile.x + brickWidth - 1 < x + radius + absSpeedX) {
return 1;
}
}
return 0;
}
有时候球会因为弹起而错误地反弹出去