1.如果您想要的东西接近您的模型,我会使用粒子(它不一定是完全成熟的粒子系统)。
在RenderTexture上以多边形的形式渲染粒子。确保在颗粒上使用添加剂混合。多边形内部的粒子将彼此平滑融合,而外部的粒子将提供所需的柔和边缘。(可以在此youtube视频中观看效果的示例:附加粒子视频
现在将RenderTexture渲染到主屏幕上,您就完成了。RenderTexture是必需的,这样粒子才不会与背景融合。
您可以尝试将三角形直接放置到粒子纹理上,然后看看如何实现。否则,将它们作为单独的图层放在“粒子汤”的顶部。
在如下所示的更新的jsfiddle中创建了一个快速的模型,
您可以在此处找到更新的演示
2.每个粒子都有一个速度和一个原点。当播放器触摸多边形时,您将更改每个与播放器速度成比例的粒子速度。粒子离您的播放器越远,受播放器速度的影响就越小。
计算粒子速度的公式如下所示:
//player.velocity and particle.velocity are vectors
//k is a factor to enhance or weaken the influence of players velocity
var distanceToPlayer = (player.position - particle.position).length();
particle.velocity = particle.velocity + ((k * player.velocity) + particle.velocity) * (1/distanceToPlayer);
要计算粒子的位置,请将其放在更新方法中:
var speedY = -(springConstant * (particle.position.y - particle.origin.y)) - (dampingFactor * particle.velocity.y);
var speedX = -(springConstant * (particle.position.x - particle.origin.x)) - (dampingFactor * particle.velocity.x);
particle.position.y = particle.position.y + speedY;
particle.position.x = particle.position.x + speedX;
particle.velocity.x = particle.velocity.x + speedX;
particle.velocity.y = particle.velocity.y + speedY;
这应该给您一个“流体”,当玩家搅拌流体时,每个粒子都围绕其原点摆动。springConstant会改变粒子从其原点摆动的幅度,而阻尼系数会改变粒子静止的速度。您可能需要调整代码,因为它是我在游戏中使用的一维模拟的修改版本。
现在有了一个演示:演示
只需调整顶部的3个常量,直到流体的行为像您想要的那样即可。