返回

弹跳小球:给您的 Canvas 增添活力

前端

用 Canvas 绘制弹跳小球:打造栩栩如生的网页动画

绘制小球

在 Canvas 上绘制小球,我们使用弧形路径 arc() 方法。它以给定的半径和角度绘制弧线,从而创建圆形或椭圆形。对于一个半径为 100 像素的小球,我们使用以下代码:

ctx.beginPath();
ctx.arc(100, 100, 100, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();

赋予物理属性

为了让小球动起来,我们需要赋予其物理属性,如位置、速度和加速度。这些属性将决定小球的运动轨迹。位置由 xy 坐标表示,而速度和加速度由 vxvyaxay 分量表示。

处理碰撞检测

当小球在 Canvas 上移动时,它可能会撞到边界或其他物体。为了实现碰撞检测,我们需要计算小球的位置和速度,并在它与边界或物体相交时调整其运动。

将小球动画添加到网页

使用 JavaScript 控制小球的运动并使用 CSS 定义小球的外观。一个简单的 JavaScript 动画循环如下所示:

function animate() {
  requestAnimationFrame(animate);

  // 更新小球的位置
  updateBall();

  // 处理碰撞检测
  checkCollision();

  // 绘制小球
  drawBall();
}

animate();

代码示例

<canvas id="canvas" width="500" height="500"></canvas>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var ball = {
  x: 100,
  y: 100,
  vx: 5,
  vy: 5,
  radius: 100,
  color: 'red'
};

function drawBall() {
  ctx.beginPath();
  ctx.arc(ball.x, ball.y, ball.radius, 0, 2 * Math.PI);
  ctx.fillStyle = ball.color;
  ctx.fill();
}

function updateBall() {
  ball.x += ball.vx;
  ball.y += ball.vy;
}

function checkCollision() {
  if (ball.x + ball.radius > canvas.width || ball.x - ball.radius < 0) {
    ball.vx = -ball.vx;
  }
  if (ball.y + ball.radius > canvas.height || ball.y - ball.radius < 0) {
    ball.vy = -ball.vy;
  }
}

animate();

常见问题解答

  • 小球移动太快或太慢怎么办?
    调整 vxvy 值以控制小球的速度。

  • 小球在边界处消失怎么办?
    checkCollision() 函数中,检查小球是否超出边界,并将其移动回 Canvas 内。

  • 如何让小球改变颜色?
    修改 ball.color 的值,例如 ball.color = 'blue'

  • 如何添加多个小球?
    创建多个 ball 对象并同时绘制和更新它们。

  • 如何让小球反弹而不是穿透物体?
    在碰撞检测中,计算小球与物体相交的角度并相应地调整其速度。