9

我的应用程序的一部分显示了风景,但现在有点无聊。因此,我计划在屏幕上设置一些粒子的动画(想想小翅膀之类的东西 - http://www.youtube.com/watch?v=DpmcX-rWGfs)。但是,我还没有找到任何内置的粒子系统;我怎样才能有效地做到这一点?我已经实现了我自己的动画系统,用于使用 CADisplayLink 为景观上的一些云设置动画,它有点迟钝(尽管我希望尽快让它更快)。另一个非常繁重的系统,比如我想一次动画 20 个小点,可能会破坏它。

4

4 回答 4

5

我还没有找到任何内置的粒子系统;

有几个“免费”项目嵌入了粒子系统,你可以访问这个视频教程,了解一个粒子系统,它的效率足以满足你提到的需求。这种粒子系统的制作方式和Cocos2d基本一样,看教程,然后下载工程文件,就可以很方便的把他们的Particle Emitter嵌入到你的工程中了。

我怎样才能有效地做到这一点?

我建议你使用“对象池模式”,基本上你预先分配一个粒子“池”,比如说 1000 个对象。然后你的发射器,在需要粒子时向池询问粒子。如果池为空,您可以相应地管理案例。从内存的角度来看,这可能看起来效率不高,但它在性能方面非常有效(以避免实时分配许多像粒子这样的小对象)。

一些建议,当你声明你的粒子结构时,尽量轻量级并与 2 的幂对齐(这将使你的结构更加缓存友好),这个是 32 字节:

struct Particle 
{
    CGPoint position;
    CGPoint speed;  
    float life;
    float decay;
    unsigned short index;
    unsigned char color_R;
    unsigned char color_G;
    unsigned char color_B;
    unsigned char color_A;
    unsigned char rotation;
};

但是根据您的需要,这可能会小得多,也许您并不真的需要颜色/索引/等。你必须自己评估。

最后推荐你看看 cocos2dCCParticleSystem类,你可以在这里下载代码。它们的实现不是那么轻量级,但它非常灵活,可以达到非常好的效果。

祝你的粒子好运:)

于 2011-04-01T10:53:47.303 回答
4

你应该看看 Matt Drance 写的新书 iOS 食谱:

http://pragprog.com/titles/cdirec/ios-recipes

其中一个方法是利用内置的 CoreAnimation CAReplicatorLayer 在“构造一个简单的发射器”中构建一个发射器。

这本书仍处于 alpha 阶段,但如果您现在购买它,您将在完成后获得更新。

于 2011-03-23T15:09:17.817 回答
4

Cocos2D 是一个使用 OpenGL ES 1 进行渲染的 2D 图形引擎。它带有一个内置的粒子系统。粒子引擎的代码非常简单。它使用 VBO 为粒子绘制带纹理的四边形。您应该能够根据自己的需要进行调整。

于 2011-03-30T19:36:49.330 回答
0

如果你想针对 iOS5 及以上版本,你可以使用 OS 的内置工具,即 CAEmitterLayer。

于 2012-08-10T16:07:14.820 回答