绘制粒子

时间:2011-03-23 14:49:25

标签: iphone objective-c core-animation particles

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

4 个答案:

答案 0 :(得分:5)

  

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

有几个“免费”项目嵌入了粒子系统,你可以访问这个video tutorial来获得一个粒子系统,它对你提到的需求来说足够有效。制作粒子系统的方式基本上与Cocos2d使用的方式相同,因此观看教程,然后下载项目文件,您可以轻松地将粒子发射器嵌入到项目中。

  

我怎样才能有效记忆?

我建议你使用“Object Pool Pattern”,基本上你预先分配一个粒子的“池”,比方说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;
};

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

最后我建议你看看cocos2d CCParticleSystem类,你可以下载代码here。它们的实现并不轻巧,但它非常灵活,可以实现非常好的效果。

祝你的颗粒好运:)

答案 1 :(得分:4)

你应该查看Matt Drance撰写的新书“iOS食谱”:

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

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

这本书仍处于阿尔法,但如果您现在购买,则会在完成后获得更新。

答案 2 :(得分:4)

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

答案 3 :(得分:0)

如果您想要定位iOS5及更高版本,您可以使用操作系统的内置工具,即CAEmitterLayer。