返回

技术实战之视野修炼第72期 | 22 种方式花式展现弹🏀动画

见解分享

篮球动画的无限可能:22 种实现方式

想要为您的项目增添趣味性和交互性?篮球动画是您的不二选择,无论是体育应用还是游戏,都能完美契合。本文将为您揭秘实现篮球动画的 22 种方法,让您的创作迸发出无限可能。

1. CSS 动画:简单便捷

CSS 动画是初学者迈入篮球动画世界的理想选择。只需借助 CSS 的 @keyframes 规则,即可为您的篮球元素赋予栩栩如生的动作。比如,以下代码会让篮球上下弹跳:

@keyframes bounce {
  0% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-20px);
  }
  100% {
    transform: translateY(0);
  }
}

.basketball {
  animation: bounce 1s infinite alternate;
}

2. JavaScript 动画:灵活性十足

JavaScript 动画提供更强大的灵活性,让您轻松控制篮球在屏幕上的移动。以下代码示例会让篮球在屏幕上自由穿梭:

var basketball = document.querySelector('.basketball');

function moveBasketball() {
  var x = Math.random() * window.innerWidth;
  var y = Math.random() * window.innerHeight;

  basketball.style.left = x + 'px';
  basketball.style.top = y + 'px';
}

setInterval(moveBasketball, 100);

3. Canvas 动画:绘制自由

Canvas 动画让您尽情发挥想象力,在画布上挥洒创意。以下代码示例会让篮球在画布上弹跳:

var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');

var x = 100;
var y = 100;
var dx = 5;
var dy = 5;

function drawBasketball() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();
  ctx.arc(x, y, 10, 0, 2 * Math.PI);
  ctx.fillStyle = '#ff0000';
  ctx.fill();

  x += dx;
  y += dy;

  if (x < 0 || x > canvas.width) {
    dx = -dx;
  }
  if (y < 0 || y > canvas.height) {
    dy = -dy;
  }
}

setInterval(drawBasketball, 10);

4. SVG 动画:简洁高效

SVG 动画以其简洁高效著称,以下代码示例会让篮球在 SVG 画布上弹跳:

<svg width="200" height="200">
  <circle cx="100" cy="100" r="10" fill="#ff0000" />
  <animate attributeName="cy" values="100;200;100" dur="1s" repeatCount="indefinite" />
</svg>

5. WebGL 动画:极致逼真

WebGL 动画在追求逼真的道路上更进一步,以下代码示例会让篮球在 WebGL 画布上弹跳:

var canvas = document.querySelector('canvas');
var gl = canvas.getContext('webgl');

var vertexShader = `
  attribute vec3 position;

  void main() {
    gl_Position = vec4(position, 1.0);
  }
`;

var fragmentShader = `
  precision mediump float;

  void main() {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
  }
`;

var program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);

var positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
var positions = [
  -1.0, -1.0, 0.0,
  1.0, -1.0, 0.0,
  -1.0, 1.0, 0.0,
  1.0, 1.0, 0.0
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

var positionLocation = gl.getAttribLocation(program, 'position');
gl.vertexAttribPointer(positionLocation, 3, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(positionLocation);

var time = 0.0;

function render() {
  gl.clearColor(0.0, 0.0, 0.0, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);

  time += 0.01;

  var y = Math.sin(time) * 0.5 + 0.5;

  gl.uniform1f(timeLocation, time);

  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);

  requestAnimationFrame(render);
}

requestAnimationFrame(render);

6-11. 辅助工具:动画库、代码生成器、预制动画、动捕数据和物理引擎

除了上述直接编码实现的方法外,还有更多便捷工具可供选择:

  • 动画库: Animate.css、GreenSock Animation Platform 等库提供了丰富的预定义动画,简化您的开发流程。
  • 代码生成器: CodePen、JSfiddle 等工具让您无需敲击代码即可生成动画效果。
  • 预制动画: Adobe Stock、Shutterstock 等网站提供现成的篮球动画素材,即取即用。
  • 动捕数据: Mixamo、Adobe Motion Library 等平台提供真实的人体动作数据,让您的篮球动画更加逼真。
  • 物理引擎: Bullet Physics、Havok Physics 等引擎模拟物理规律,让您的篮球动画符合现实世界中的物理特性。

结论

实现篮球动画的方式多种多样,每种方法都有其独特的优势和适用场景。从简单的 CSS 动画到逼真的 WebGL 动画,选择最适合您需求的方法,让您的篮球动画作品脱颖而出。

常见问题解答

1. 如何让篮球在空中旋转?

  • 使用 CSS 动画或 JavaScript 代码控制篮球的旋转。

2. 如何让篮球在投篮后落入篮筐?

  • 使用物理引擎模拟篮球的抛物线运动。

3. 如何让篮球在球场上弹跳?

  • 使用动捕数据或物理引擎模拟真实世界的弹跳效果。

4. 如何让篮球改变颜色?

  • 使用 CSS 或 JavaScript 代码动态更改篮球的颜色。

5. 如何让篮球发出声音?

  • 使用 HTML5 Audio 元素或 JavaScript 库添加声音效果。