返回

挥一挥手,炸弹走你——二阶贝塞尔仿微信扔炸弹动画

Android

前言

微信炸屎动画风靡一时,相信不少人已经体验过。这里我们先仿照一个微信扔炸弹的动画,后续有时间会做一个更完整的版本。

具体实现

最麻烦的部分是绘制抛物线,爆炸效果只是播放了一个动画。微信似乎都是使用二阶贝塞尔曲线来绘制抛物线的,因为它可以轻松地控制曲线的形状。

一、二阶贝塞尔曲线

二阶贝塞尔曲线由三个点定义:起点、终点和控制点。控制点决定曲线的形状。

要绘制二阶贝塞尔曲线,可以使用以下步骤:

  1. 将起点和终点连接成一条直线。
  2. 在直线的中点添加一个控制点。
  3. 将起点和控制点连接成一条直线。
  4. 将控制点和终点连接成一条直线。
  5. 这两条直线相交于一点,该点就是二阶贝塞尔曲线上的一点。
  6. 重复步骤 3 到 5,直到绘制出整个曲线。

二、代码实现

// 定义起点、终点和控制点
var startPoint = {x: 0, y: 0};
var endPoint = {x: 100, y: 100};
var controlPoint = {x: 50, y: 50};

// 绘制二阶贝塞尔曲线
var curve = new BezierCurve(startPoint, endPoint, controlPoint);

// 将曲线添加到画布上
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.strokeStyle = "#000";
context.beginPath();
context.moveTo(startPoint.x, startPoint.y);
context.bezierCurveTo(controlPoint.x, controlPoint.y, endPoint.x, endPoint.y);
context.stroke();

三、爆炸效果

爆炸效果很简单,只需要播放一个动画即可。

// 创建爆炸动画
var explosion = new Animation("explosion.png", 100, 100);

// 将爆炸动画添加到画布上
context.drawImage(explosion.image, explosion.x, explosion.y);

四、完整代码

// 定义起点、终点和控制点
var startPoint = {x: 0, y: 0};
var endPoint = {x: 100, y: 100};
var controlPoint = {x: 50, y: 50};

// 绘制二阶贝塞尔曲线
var curve = new BezierCurve(startPoint, endPoint, controlPoint);

// 将曲线添加到画布上
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.strokeStyle = "#000";
context.beginPath();
context.moveTo(startPoint.x, startPoint.y);
context.bezierCurveTo(controlPoint.x, controlPoint.y, endPoint.x, endPoint.y);
context.stroke();

// 创建爆炸动画
var explosion = new Animation("explosion.png", 100, 100);

// 将爆炸动画添加到画布上
context.drawImage(explosion.image, explosion.x, explosion.y);

结语

这就是如何使用二阶贝塞尔曲线创建微信扔炸弹动画的全部内容。希望对你有帮助!