ufolr原创,转载请注明:
最近项目中需要一个落叶的效果,本来想用粒子特效来实现,但是几经调试,虽然调出了落叶的效果,但是并不是十分理想,最大的不足就是落叶是平面的,没有立体感,虽然把落叶做小之后却是立体感的感觉会有所缓解,但总不能把树叶无限的缩小吧,而且立体感的缺失在粒子特效中确实是一个始终存在的问题。作为一个最求品质的程序猿,最终还是决定自己设精灵动作来实现。
在分析了粒子特效实现的原理并在国内外论坛上爬了半天,最后边实验边修改,终于完成了一个可行的仿真感较强的立体的落叶效果,现在就拿出来跟大家分享一下。
原理->树叶飘落动作分析:
树叶下落过程分解为:下落+摆动+叶片自传。
也就是只要将这三个动作实现,并同时执行就可以实现树叶飘落的效果。
下面就拿出代码具体解析实现过程:
老规矩,先上.h的内容,.h就不多解释了:
#ifndef __LEAF_H__
#define __LEAF_H__
#include "cocos2d.h"
USING_NS_CC;
classLeaf :publiccocos2d::CCLayer
{
public:
virtualboolinit();
voidresetLeafPos(CCNode* sender);//叶片位置重置函数
voidplayLeafAnim(CCSprite *spriteLeaf);//下落过程实现函数
LAYER_NODE_FUNC(Leaf);
};
#endif // __LEAF_H__
接下来是具体的实现,为了我们能不断的产生自然、随和的落叶,我们分三步来完成:
1:第一次初始化;2:落叶动作的实现;3:下落动作完成重新设定落叶开始。
上代码,先看看用到的头文件:
#include
#include
#include
#include"Leaf.h"
usingnamespacestd;
enum{TAG_LEAF1 = 101, TAG_LEAF2};
初始化树叶精灵的设定:</