查看原文
其他

物体随机飞溅运动! Cocos Creator!

lamyoung 白玉无冰 2022-06-10


大量物体以随机初速度的飞溅运动!文章底部附完整代码!

效果预览

像火山喷发、烟花等等运动,都是物体随机飞溅运动。

这个运动其实是抛物运动。

抛物运动也可以看成是匀加速运动。

假设一个物体的初速度为v_0,加速度为a,某一个时刻t的速度公式如下:

v = v_0 + a * t

对这个公式作一次积分,正好是位移。

s = v_0 * t + 0.5 * a * t * t + C

常量C,是物体的初始位置。

我们把物体分成xy两个方向考虑,用上面的公式可以求出在t时刻的物体的位置。为此写个通用的组建控制每个物体的位置控制。主要代码如下。

update(dt) { this._time += dt; this.node.x = this._initial_position.x + this.initial_velocity.x * this._time + this.acceleration.x * this._time * this._time / 2; this.node.y = this._initial_position.y + this.initial_velocity.y * this._time + this.acceleration.y * this._time * this._time / 2;}

再来看看如何随机初始速度。

当然直接使用Math.random()可以实现。参考代码如下。

// 0-1 均匀分布const random_a = Math.random();const random_b = Math.random();
// 均匀分布的初速度coin.initial_velocity.x = random_a * (V_X_MAX - V_X_MIN) + V_X_MIN;coin.initial_velocity.y = random_b * (V_Y_MAX - V_Y_MIN) + V_Y_MIN;

生成的结果如下。

这个运行结果可能看起来不太自然。这是为什么呢?

因为自然界中的初速度不是均匀分布的,而是正态分布。

如何生成正态分布的初速度?这里用到Box-Muller算法。这个算法是根据均匀分布的随机数来产生正态分布的随机数算法。

 将这个标准正态分布产生的数值进行一定的转化,可以让飞溅运动的物体的初速度 95% 的概率在我们的速度范围内。有小概率会超出范围,这样效果看起来就更自然了些。

const random_a = Math.random();const random_b = Math.random();
// box-muller 算法 r1 = sqrt(-2 * ln a) * sin(2*PI*b) r2 = sqrt(-2 * ln a) * cos(2*PI*b)const boxMuller_r = Math.sqrt(-2 * Math.log(random_a));const boxMuller_t = 2 * Math.PI * random_b;// 标准正态分布 N~(0,1) 68% 的概率 -1~1 95% 的概率 -2~2const random_normal_x = boxMuller_r * Math.cos(boxMuller_t);const random_normal_y = boxMuller_r * Math.sin(boxMuller_t);// random_normal ==除以4==> 95% 的概率 -0.5~0.5 ==加0.5==> 95% 的概率 0~1coin.initial_velocity.x = (random_normal_x / 4 + 0.5) * (V_X_MAX - V_X_MIN) + V_X_MIN;coin.initial_velocity.y = (random_normal_y / 4 + 0.5) * (V_Y_MAX - V_Y_MIN) + V_Y_MIN;

以上为白玉无冰使用 Cocos Creator v2.2.2 开发"物体随机飞溅运动!"的技术分享。欢迎留言交流!如果这篇对你有点帮助,欢迎分享给身边的朋友。




贪吃蛇大作战!蛇移动的思考与实现!

雷达图的一种实现!

分形的奥秘!分形着色器!shader 编程入门实战 !

mesh的多边形裁剪!gizmo 插件入门 !

使用卷积实现各种滤镜效果!shader 编程实战!

飘扬的旗帜!shader 编程实战!

小游戏-不停歇的球!源码相送!

2019 往期精选!附送 github 地址!

转载请保留文末二维码和完整代码获取方式!

完整项目:https://github.com/baiyuwubing/cocos-creator-examples/tree/master/splash

点击“阅读原文”查看完整项目

我就知道你“在看”▼

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存