阻止突破游戏和圆角碰撞问题

时间:2019-06-03 07:02:53

标签: processing

我被一个朋友挑战去做一个破砖游戏,但是我无法弄清碰撞错误。我已经尝试了包括矢量数学在内的所有方法(我不擅长)来使球弹起。 如果球不反弹,我附加的函数将返回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;
  }

有时候球会因为弹起而错误地反弹出去

0 个答案:

没有答案