我的应用程序的一部分显示了风景,但现在有点无聊。因此,我计划在屏幕上设置一些粒子的动画(想想小翅膀之类的东西 - http://www.youtube.com/watch?v=DpmcX-rWGfs)。但是,我还没有找到任何内置的粒子系统;我怎样才能有效地做到这一点?我已经实现了我自己的动画系统,用于使用 CADisplayLink 为景观上的一些云设置动画,它有点迟钝(尽管我希望尽快让它更快)。另一个非常繁重的系统,比如我想一次动画 20 个小点,可能会破坏它。
4 回答
我还没有找到任何内置的粒子系统;
有几个“免费”项目嵌入了粒子系统,你可以访问这个视频教程,了解一个粒子系统,它的效率足以满足你提到的需求。这种粒子系统的制作方式和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
类,你可以在这里下载代码。它们的实现不是那么轻量级,但它非常灵活,可以达到非常好的效果。
祝你的粒子好运:)
你应该看看 Matt Drance 写的新书 iOS 食谱:
http://pragprog.com/titles/cdirec/ios-recipes
其中一个方法是利用内置的 CoreAnimation CAReplicatorLayer 在“构造一个简单的发射器”中构建一个发射器。
这本书仍处于 alpha 阶段,但如果您现在购买它,您将在完成后获得更新。
Cocos2D 是一个使用 OpenGL ES 1 进行渲染的 2D 图形引擎。它带有一个内置的粒子系统。粒子引擎的代码非常简单。它使用 VBO 为粒子绘制带纹理的四边形。您应该能够根据自己的需要进行调整。
如果你想针对 iOS5 及以上版本,你可以使用 OS 的内置工具,即 CAEmitterLayer。