Answers:
看看Q-Games用于Pixeljunk Shooter。这是一个二维游戏,涉及流体物理学。我不确定他们使用的是本地生产的还是中间件物理引擎,但是这些信息可能在某个地方。
好吧,我还没有研究这个问题,但是我知道几乎任何物理引擎都可以效仿这个想法。Box2D等
基本上,粒子会在周围,表面和彼此之间反弹(对于气体而言更快),但还会赋予它们恒定的重力效应(液体都具有相同的重力,但有些气体可能希望缓慢上升)。
如果链接外部粒子,您将获得代表质量的多边形形状
要么
如果仅在每个粒子上绘制像素或粒子图形,则可以代替质量实现云效果。
我能想到的唯一一个专门处理流体的库是Fluidic。它是相当漂亮的alpha版本,但是只有一个发行版。物理库Bullet支持“平滑粒子流体动力学”,这是一种用于对流体建模的技术。尽管库是面向3D的,但您可以将约束应用于一个轴以使其在2D中工作。
正如我在其他答案的一些评论中已经提到的那样,我的建议是使用标准物理引擎(例如Box2D或Chipmunk),并使用多个圆圈对水(具有重力)或气体(没有重力)进行建模,并将它们组合在一起变成一个水或气体。您可以对单个实体施加一些约束,以使它们“成团”在一起,从而可以模拟粘度。观看此视频,了解各个实体(在视频中建模为正方形)如何协同工作。但是请注意,该视频中使用的技术与本段中提到的技术不同。您可以使用视频了解圆如何相互作用,并尝试使用所使用的物理库中存在的约束来模仿。
当您要将多个圆圈合并到水体中时,有趣的部分来了。我能想到的最简单的解决方案是将每个圆画成一个金属球,使它们看起来像一个更大的身体。您可以在数学和这些机构背后的一些示例代码在这里。
这个问题发布已经有几年了,但是我在搜索时遇到了这个问题,所以我想我会对其进行更新。
Google发布了Box2D系统的LiquidFun(开源)。它有一些局限性,但这是一种以相当不错的性能开始使用液体,沙子等颗粒的快速方法。
https://github.com/google/liquidfun
PixelJunk方法很棒,但这是一个私有库。他们在GCD 2010的演讲中分享了惊人的细节。