粒子系统/制作烟花

时间:2018-04-19 19:25:54

标签: particles

所以我必须创建一个粒子系统,但只制作一个烟花'让它在画布的中心消失。我只是坚持如何移动粒子并让它们从中间开始。现在他们只是到处飞。

`function Particle() {
this.x = Math.random() * canvas.width;
this.y = Math.random() * canvas.height;
this.vx = Math.random() * 10 - 5;
this.vy = Math.random() * 10 - 5;`

我一直在摆弄数字,但它要么影响粒子的颜色,要么只显示一个粒子消失。我根本没有使用粒子工作,我在网上找到的通常是Maya或Unity。

1 个答案:

答案 0 :(得分:0)

我假设每个粒子执行此代码,是吗?

要将它放在画布上,你需要的位置是(画布宽度/ 2,画布高度/ 2),或者:

this.x = canvas.width / 2;
this.y = canvas.height / 2;

但这只是一个片段。要使它围绕该点聚类,您可以尝试使用铃声函数,或者更简单地将随机乘以限制:

this.x = (canvas.width / 2) + Math.random() * (radius * 2) - radius;
this.y = (canvas.height / 2) + Math.random() * (radius * 2) - radius;

关于第二种方法的唯一问题是,一些粒子将向后飞向烟花。您可以通过找到相对方向来解决这个问题:

Vector2 dir = ( Vector2(this.x, this.y) - Vector2(canvas.width / 2, canvas.height / 2) ).normalized;

将其乘以随机向量(或更实际地,幂函数)

Vector2 v = dir * Math.random();

-OR -

Vector2 v = dir * Math.pow(dir.magnitude, 2);

其中Vector2是任何标准的2D矢量类(不确定你使用的是什么,你可能想要自己动手),。maggnitude只是sqrt(vx ^ 2 + vy ^ 2),而.normalized是(vx) /v.magnitude,vy / v.magnitude)。

应该这样做。