代码:
/** @class MotionStreak.
* @brief Creates a trailing path.
*/
// 移动纹理
class CC_DLL MotionStreak : public Node, public TextureProtocol
{
public:
/** Creates and initializes a motion streak with fade in seconds, minimum segments, stroke's width, color, texture filename.
*
* @param fade The fade time, in seconds.
* @param minSeg The minimum segments.
* @param stroke The width of stroke.
* @param color The color of stroke.
* @param path The texture file name of stoke.
* @return An autoreleased MotionStreak object.
*/
// 创建一个MotionStreak对象
static MotionStreak* create(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path);
/** Creates and initializes a motion streak with fade in seconds, minimum segments, stroke's width, color, texture.
*
* @param fade The fade time, in seconds.
* @param minSeg The minimum segments.
* @param stroke The width of stroke.
* @param color The color of stroke.
* @param texture The texture name of stoke.
* @return An autoreleased MotionStreak object.
*/
static MotionStreak* create(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture);
/** Color used for the tint.
*
* @param colors The color used for the tint.
*/
// 通过颜色着色
void tintWithColor(const Color3B& colors);
/** Remove all living segments of the ribbon.
*/
// 清除当前所有的带子部分
void reset();
/** When fast mode is enabled, new points are added faster but with lower precision.
*
* @return True if fast mode is enabled.
*/
// 是否是快速模式
inline bool isFastMode() const { return _fastMode; }
/** Sets fast mode or not.
*
* @param bFastMode True if enabled fast mode.
*/
// 设置快速模式
inline void setFastMode(bool bFastMode) { _fastMode = bFastMode; }
/** Get stroke.
*
* @return float stroke.
*/
// 得到滑动距离
inline float getStroke() const { return _stroke; }
/** Set stroke.
*
* @param stroke The width of stroke.
*/
// 设置滑动距离
inline void setStroke(float stroke) { _stroke = stroke; }
/** Is the starting position initialized or not.
*
* @return True if the starting position is initialized.
*/
// 起始点是否已经初始化
inline bool isStartingPositionInitialized() const { return _startingPositionInitialized; }
/** Sets the starting position initialized or not.
*
* @param bStartingPositionInitialized True if initialized the starting position.
*/
// 设置起始点是否已经初始化
inline void setStartingPositionInitialized(bool bStartingPositionInitialized)
{
_startingPositionInitialized = bStartingPositionInitialized;
}
// Overrides
virtual void setPosition(const Vec2& position) override;
virtual void setPosition(float x, float y) override;
virtual const Vec2& getPosition() const override;
virtual void getPosition(float* x, float* y) const override;
virtual void setPositionX(float x) override;
virtual void setPositionY(float y) override;
virtual float getPositionX(void) const override;
virtual float getPositionY(void) const override;
virtual Vec3 getPosition3D() const override;
/**
* @js NA
* @lua NA
*/
//绘制
virtual void draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) override;
/**
* @lua NA
*/
// 更新
virtual void update(float delta) override;
// 得到纹理
virtual Texture2D* getTexture() const override;
// 设置纹理
virtual void setTexture(Texture2D *texture) override;
/**
* @js NA
* @lua NA
*/
// 设置混合函数
virtual void setBlendFunc(const BlendFunc &blendFunc) override;
/**
* @js NA
* @lua NA
*/
// 得到混合函数
virtual const BlendFunc& getBlendFunc() const override;
// 得到透明度
virtual GLubyte getOpacity() const override;
// 设置透明度
virtual void setOpacity(GLubyte opacity) override;
virtual void setOpacityModifyRGB(bool value) override;
// 透明度是否影响RGB
virtual bool isOpacityModifyRGB() const override;
CC_CONSTRUCTOR_ACCESS:
MotionStreak();
virtual ~MotionStreak();
/** initializes a motion streak with fade in seconds, minimum segments, stroke's width, color and texture filename */
// 初始化
bool initWithFade(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path);
/** initializes a motion streak with fade in seconds, minimum segments, stroke's width, color and texture */
bool initWithFade(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture);
protected:
//renderer callback
// 渲染回调
void onDraw(const Mat4 &transform, uint32_t flags);
bool _fastMode;
bool _startingPositionInitialized;
/** texture used for the motion streak */
Texture2D* _texture;
BlendFunc _blendFunc;
Vec2 _positionR;
float _stroke;
float _fadeDelta;
float _minSeg;
unsigned int _maxPoints;
unsigned int _nuPoints;
unsigned int _previousNuPoints;
/** Pointers */
Vec2* _pointVertexes;
float* _pointState;
// Opengl
Vec2* _vertices;
GLubyte* _colorPointer;
Tex2F* _texCoords;
CustomCommand _customCommand;
private:
CC_DISALLOW_COPY_AND_ASSIGN(MotionStreak);
};