这更像是一个问题,要求就我应该使用哪种模式/方法提出一些建议。我已经对这个问题进行了一些调查 - 效果不佳。
基本上我对游戏有一个想法,其中关键的游戏机制基于落雪 - 或者,在这个想法游戏的情况下 - 下降粒子。
雪/颗粒需要从屏幕上掉下来 - 但堆积成堆。问题是,当它们是一定角度时,我需要下雪来“滴下”桩的两侧,并继续积累。有可能在一堆积雪下面打开洞,雪必须掉下来 - 想象沙子从沙漏中落下。
我试过这是Box2d - 很明显,Box2d不是10,000个微小粒子的正确选择 - 持续很长一段时间。 Box 2D很快就会死亡。
我尝试在屏幕上绘制1px位图,但每次更新处理10,000次碰撞的行为都表现不佳。
任何想法都会受到赞赏。
干杯
答案 0 :(得分:1)
嗯,就像你发现的那样,没有现有的图书馆可以帮助你,除非它特别适合你的场景。遗憾的是,有了很多东西可供选择,看起来现有的粒子系统库都不支持粒子物理。
所以你需要自己做很多工作。首先,您需要考虑可能做的所有优化。就像评论所说,你不应该在每一帧的所有粒子之间运行检查。您应该使用基于点的碰撞检查,而不是物理引擎通常使用的更高级的东西。在这种情况下,您应该确保粒子总是相同的大小(相对于参考坐标系,这并不意味着您无法进行缩放)。当然,你需要跳过尽可能多的碰撞检查 - 你知道静止的粒子永远不应该被检查,就像那些在各个方面都有相邻粒子的粒子一样 - 这让我想到了网格。也许你可以将整个'世界'表示为网格,并从这个角度简化逻辑 - 与Minecraft几乎相同,你不同意吗?
无论如何,我意识到我有点乱,但这是一个如此开放的主题... :)
答案 1 :(得分:1)
在这个酷炫效果(XNA和MonoGame)上花了很多钱 http://www.int6.org/development/cool-effects-for-xna-monogame/
没有雪效果,但是你可以使用o修改一些兴趣效果。
答案 2 :(得分:1)
是否可能监控物理引擎实际处理的粒子?如果是这样,有没有办法可以停止处理物理,或严格限制处理的内容,如果它们的速度小于0.01或类似的东西?
如果您只处理需要处理的粒子,那么您可以拥有任意数量的粒子,假设它们并非一次全部移动!
如果这仍然是一个问题,那听起来流体动力学解决方案可能更合适,因为流体动力学基本上是一大堆小的移动粒子。
以下是有关2D流体动力学的一些有趣信息:
http://www.ibiblio.org/e-notes/webgl/gpu/fluid.htm
您的物理引擎可能已包含您需要的内容。