8

这更像是一个关于我应该使用哪种模式/方法的建议的问题。我对这个问题做了一些调查——结果很差。

本质上,我有一个游戏的想法,其中关键的游戏机制是基于飘落的雪——或者,在这个想法游戏的情况下——下落的粒子。

雪/颗粒需要从屏幕上掉下来 - 但会堆积成堆。问题是,当它们达到一定角度时,我需要下雪以“涓涓细流”桩的两侧,并继续积累。有可能在成堆的雪下面开洞,雪必须掉出来——想想就像沙子从沙漏里掉下来一样。

我试过这是 Box2d - 很明显 Box2d 不是 10,000 个微小粒子的正确选择 - 持续很长时间。Box 2D 很快就死了。

我尝试在屏幕上绘制 1px 位图,但每次更新处理 10,000 次碰撞也证明性能不佳。

任何想法,将不胜感激。

干杯

4

3 回答 3

1

Is it possibly to monitor which particles are actually being processed by the physics engine? If so, is there a way whereby you can stop processing their physics, or severely limit what is processed, if their velocity is less than 0.01 or something of the like?

If you only process the particles that need processing, then you can have as many as you like, assuming that they are not all moving at once!

If this is still a problem, it sounds like a fluid dynamics solution may be more fitting, as fluid dynamics is basically a whole lot of small, moving particles.

Here is some interesting information on 2D fluid dynamics:

http://www.ibiblio.org/e-notes/webgl/gpu/fluid.htm

Your physics engine may already contain what you need.

于 2013-02-26T16:12:36.717 回答
1

好吧,就像您发现的那样,没有现有的库可以帮助您,除非它非常专门针对您的场景。不幸的是,XNA 没有太多东西可供选择,而且看起来现有的粒子系统库都不支持粒子物理。

所以你需要自己做很多工作。首先,您需要考虑您可以做的所有优化。就像评论说的那样,你不应该在每一帧的所有粒子之间运行检查。您应该使用基于点的碰撞检查,而不是物理引擎通常使用的更高级的东西。在这种情况下,您应该确保粒子始终具有相同的大小(相对于参考坐标系,也就是说,这并不意味着您不能进行缩放)。当然,你需要尽可能多地跳过碰撞检查——你知道静止的粒子永远不应该被检查,就像那些在所有侧面都有相邻粒子的粒子一样——这让我想到了网格。也许您可以将整个“世界”表示为一个网格,

无论如何,我意识到我有点漫无边际,但这是一个如此开放的主题...... :)

于 2013-02-25T23:09:29.267 回答
1

在这个很酷的效果(用于 XNA 和 MonoGame) http://www.int6.org/development/cool-effects-for-xna-monogame/

没有雪景效果,但您可以使用或修改一些兴趣效果。

于 2013-02-26T16:04:45.013 回答