当前位置:编程学习 > wap >>

Cocos2d-x 2.0 拖尾效果深入分析

     今天我们来学习一下Cocos2d-x中的拖尾效果。在游戏中,拖尾效果常常用来做刀光,火球法术等一些运动物体的效果。如图:
                                       
 
        在Cocos2d-x中,拖尾效果有一个专门的类CCMotionStreak来实现。下面我们打开CCMotionStreak.h来看一下:
[cpp]  
#ifndef __CCMOTION_STREAK_H__  
#define __CCMOTION_STREAK_H__  
  
#include "CCProtocols.h"  
#include "textures/CCTexture2D.h"  
#include "ccTypes.h"  
#include "base_nodes/CCNode.h"  
//使用Cocos2d命名空间  
NS_CC_BEGIN  
  
//条带由三个基类共同派生  
class CC_DLL CCMotionStreak : public CCNode, public CCTextureProtocol, public CCRGBAProtocol  
{  
public:  
    //构造  
    CCMotionStreak();  
    //析构  
    virtual ~CCMotionStreak();  
    //静态函数,创建一个拖尾效果,内部调用create实现,参一为消隐动画时长,参二为拖尾条带相邻顶点间的最小距离,参三为拖尾条带的宽度,参四为顶点颜色值,参五为所使用的纹理图片。  
    CC_DEPRECATED_ATTRIBUTE static CCMotionStreak* streakWithFade(float fade, float minSeg, float stroke, ccColor3B color, const char* path);  
    //静态函数,创建一个拖尾效果,内部调用create实现,参一为消隐动画时长,参二为拖尾条带相邻顶点间的最小距离,参三为拖尾条带的宽度,参四为顶点颜色值,参五为所使用的纹理对象指针。  
    CC_DEPRECATED_ATTRIBUTE static CCMotionStreak* streakWithFade(float fade, float minSeg, float stroke, ccColor3B color, CCTexture2D* texture);  
  
    //上面第一个创建函数的create实现。  
    static CCMotionStreak* create(float fade, float minSeg, float stroke, ccColor3B color, const char* path);  
    //上面第二个创建函数的create实现。  
    static CCMotionStreak* create(float fade, float minSeg, float stroke, ccColor3B color, CCTexture2D* texture);  
  
    //初始化拖尾效果  
    bool initWithFade(float fade, float minSeg, float stroke, ccColor3B color, const char* path);  
    //初始化拖尾效果  
    bool initWithFade(float fade, float minSeg, float stroke, ccColor3B color, CCTexture2D* texture);  
  
    //  
    void tintWithColor(ccColor3B colors);  
  
    //重置,删除所有的条带段  
    void reset();  
  
    //设置位置  
    virtual void setPosition(const CCPoint& position);  
    //绘制  
    virtual void draw();  
    //更新  
    virtual void update(float delta);  
  
    //取得纹理。  
    virtual CCTexture2D* getTexture(void);  
    //设置纹理。  
    virtual void setTexture(CCTexture2D *texture);  
    //设置  
    virtual void setBlendFunc(ccBlendFunc blendFunc);  
    virtual ccBlendFunc getBlendFunc(void);  
    //设置颜色  
    virtual void setColor(const ccColor3B& color);  
    virtual const ccColor3B& getColor(void);  
    //设置透明度  
    virtual GLubyte getOpacity(void);  
    virtual void setOpacity(GLubyte opacity);  
    //设置修改A同时影响RGB  
    virtual void setOpacityModifyRGB(bool bValue);  
    virtual bool isOpacityModifyRGB(void);  
  
    //是否是快速模式  
    inline bool isFastMode() { return m_bFastMode; }  
    inline void setFastMode(bool bFastMode) { m_bFastMode = bFastMode; }  
    //起点是否初始化  
    inline bool isStartingPositionInitialized() { return m_bStartingPositionInitialized; }  
    inline void setStartingPositionInitialized(bool bStartingPositionInitialized)   
    {   
        m_bStartingPositionInitialized = bStartingPositionInitialized;   
    }  
protected:  
    //是否是快速模式  
    bool m_bFastMode;  
    //起点是否初始化  
    bool m_bStartingPositionInitialized;  
private:  
    //所用的纹理对象指针  
    CCTexture2D* m_pTexture;  
    //ALPHA混合方案  
    ccBlendFunc m_tBlendFunc;  
    //当前拖尾起点位置  
    CCPoint m_tPositionR;  
    //颜色值  
    ccColor3B m_tColor;  
    //拖尾线条的宽度,越大当前越粗  
    float m_fStroke;  
    //每秒条带渐隐的alpha值减少量  
    float m_fFadeDelta;  
    //拖尾中用于划分条带的顶点的最小距离。  
    float m_fMinSeg;  
    //顶点最大数量  
    unsigned int m_uMaxPoints;  
    //当前的顶点数量  
    unsigned int m_uNuPoints;  
    //上次的顶点数量  
    unsigned int m_uPreviousNuPoints;  
  
    //顶点位置数组  
    CCPoint* m_pPointVertexes;  
    //顶点的状态值数组,这个状态值取值为0~1.0间,代表了消隐程度,其实就是alpha值。  
    float* m_pPointState;  
  
    // OPENGL所用的顶点各类数据绘冲  
    //位置  
    ccVertex2F* m_pVertices;  
    //颜色  
    GLubyte* m_pColorPointer;  
    //纹理UV  
    ccTex2F* m_pTexCoords;  
};  
  
// end of misc_nodes group  
/// @}  
  
NS_CC_END  
  
#endif //__CCMOTION_STREAK_H__  
 
对应的CPP:
[cpp]  
#include "CCMotionStreak.h"  
#include "textures/CCTextureCache.h"  
#include "shaders/ccGLStateCache.h"  
#include "shaders/CCGLProgram.h"  
#include "shaders/CCShaderCache.h"  
#include "ccMacros.h"  
&
补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,