CCActionGird源码分析

这个文件中是一些网格动作,网格动作的效果还是可以的,但是,网格动作对效率的影响也是十分明显的,之前用网格动作代替怪兽死亡的动画,一两只还好,当有大批怪兽死亡的时候,效率就十分低了。所以,网格动作可能不太适合同时有太多对象执行。


代码:

/** 
@class GridAction
@brief Base class for Grid actions.
@details Grid actions are the actions take effect on GridBase.
*/
/// 格子动作
/// 网格动作是影响网格基类的动作,
///之前用过一个碎片的效果,当然,那是2.x的时候,
///只有一个对象执行的时候,效率还是可以的,但是,对象增多的时候,手机就开始卡了。
/// 所以,这种特效类的动作不宜大范围的使用,如果,你不在乎执行效率的话,那就另说了。
class CC_DLL GridAction : public ActionInterval/// 又是一个瞬时动作的子类
{
public:

    /** 
    @brief Get the pointer of GridBase.
    @return The pointer of GridBase.
    */
	/// 返回GridBase的指针
    virtual GridBase* getGrid();

    // overrides
	/// 这些方法都是从Action继承过来的,就不用多说了吧!!
    virtual GridAction * clone() const override
    {
        CC_ASSERT(0);
        return nullptr;
    }
    virtual GridAction* reverse() const override;
    virtual void startWithTarget(Node *target) override;

CC_CONSTRUCTOR_ACCESS:
    GridAction() {}
    virtual ~GridAction() {}
    /** 
     * @brief Initializes the action with size and duration.
     * @param duration The duration of the GridAction. It's a value in seconds.
     * @param gridSize The size of the GridAction should be.
     * @return Return true when the initialization success, otherwise return false.
     */
	 /// 初始化
    bool initWithDuration(float duration, const Size& gridSize);

protected:
    Size _gridSize;
    
    NodeGrid* _gridNodeTarget;
    /// 将目标转化为BaseGird类型,这个函数就是一个强制类型转换
    void cacheTargetAsGridNode();

private:
    CC_DISALLOW_COPY_AND_ASSIGN(GridAction);
};

/** 
 @brief Base class for Grid3D actions.
 @details Grid3D actions can modify a non-tiled grid.
 */
 /// 3D网格动作的基类
class CC_DLL Grid3DAction : public GridAction
{
public:

	/// 得到网格基类
    virtual GridBase* getGrid() override;
    /**
     * @brief Get the vertex that belongs to certain position in the grid.
     * @param position The position of the grid.
     * @return Return a pointer of vertex.
     * @js vertex
     * @lua NA
     */
	 /// 返回属于网格中某个确定位置的顶点
    Vec3 getVertex(const Vec2& position) const;

    /** @deprecated Use getVertex() instead 
     * @js NA
     * @lua NA
     */
	 /// 废弃的方法 用上面的方法代替了
    CC_DEPRECATED_ATTRIBUTE inline Vec3 vertex(const Vec2& position) { return getVertex(position); }

    /** 
     * @brief Get the non-transformed vertex that belongs to certain position in the grid.
     * @param position The position of the grid.
     * @return Return a pointer of vertex.
     * @js originalVertex
     * @lua NA
     */
	 /// 得到属于网格中某个确定位置的非转化顶点
    Vec3 getOriginalVertex(const Vec2& position) const;

    /** @deprecated Use getOriginalVertex() instead 
     * @js NA
     * @lua NA
     */
	 /// 废弃了
    CC_DEPRECATED_ATTRIBUTE inline Vec3 originalVertex(const Vec2& position) { return getOriginalVertex(position); }

    /** 
     * @brief Set a new vertex to a certain position of the grid.
     * @param position The position of the grid.
     * @param vertex The vertex will be used on the certain position of grid.
     * @js setVertex
     * @lua NA
     */
	 /// 设置属于网格中某个确定位置的顶点
    void setVertex(const Vec2& position, const Vec3& vertex);

    // Overrides
    virtual Grid3DAction * clone() const override
    {
        CC_ASSERT(0);
        return nullptr;
    }
};

/**
@brief Base class for TiledGrid3D actions.
*/
/// 3D瓦片网格动画
class CC_DLL TiledGrid3DAction : public GridAction
{
public:
    /** 
     * @brief Create the action with size and duration.
     * @param duration The duration of the action. It's a value in seconds.
     * @param gridSize Specify the grid size of the action.
     * @return A pointer of TiledGrid3DAction. If creation failed, return nil.
     * @lua NA
     */
	 /// 创建一个3D瓦片网格动画
    static TiledGrid3DAction* create(float duration, const Size& gridSize);

    /** 
     * @brief Get the tile that belongs to a certain position of the grid.
     * @param position The position of the tile want to get.
     * @return A quadrilateral of the tile. 
     * @js tile
     * @lua NA
     */
	 /// 返回属于网格的某个确定位置的瓦片
    Quad3 getTile(const Vec2& position) const;

    /** @deprecated Use getTile() instead 
     * @js NA
     * @lua NA
     */
	 /// 废弃了
    CC_DEPRECATED_ATTRIBUTE Quad3 tile(const Vec2& position) { return getTile(position); }

    /** 
     * @brief Get the non-transformed tile that belongs to a certain position of the grid.
     * @param position The position of the tile want to get.
     * @return A quadrilateral of the tile. 
     * @js originalTile
     * @lua NA
     */
	 /// 返回属于网格的某个确定位置的未变化的瓦片
    Quad3 getOriginalTile(const Vec2& position) const;

    /** @deprecated Use getOriginalTile() instead.
     * @js NA
     * @lua NA
     */
	 /// 废弃
    CC_DEPRECATED_ATTRIBUTE Quad3 originalTile(const Vec2& position) { return getOriginalTile(position); }

    /** 
     * @brief Set a new tile to a certain position of the grid.
     * @param position The position of the tile.
     * @param coords The quadrilateral of the new tile.
     * @lua NA
     */
	 /// 为网格的某个位置设置一个瓦片
    void setTile(const Vec2& position, const Quad3& coords);

    /** returns the grid */
    virtual GridBase* getGrid() override;

    // Override
    virtual TiledGrid3DAction * clone() const override
    {
        CC_ASSERT(0);
        return nullptr;
    }
};

/**
@brief AccelDeccelAmplitude action.
@js NA
*/
/// 逐渐加快的振幅动作
class CC_DLL AccelDeccelAmplitude : public ActionInterval
{
public:
    /**
    @brief Create the action with an inner action that has the amplitude property, and a duration time.
    @param action A pointer of the inner action.
    @param duration Specify the duration of the AccelDeccelAmplitude action.
    @return Return a pointer of AccelDeccelAmplitude action. When the creation failed, return nil.
    */
	/// 创建一个振幅动作
    static AccelDeccelAmplitude* create(Action *action, float duration);

    /** 
    @brief Get the value of amplitude rate.
    @return the value of amplitude rate.
    */
	/// 得到振幅的速率
    inline float getRate(void) const { return _rate; }
    /**
    @brief Set the value of amplitude rate.
    @param rate Specify the value of amplitude rate.
    */
	/// 设置振幅的速率
    inline void setRate(float rate) { _rate = rate; }

    // Overrides
	/// 继承自Action的方法
    virtual void startWithTarget(Node *target) override;
    virtual void update(float time) override;
    virtual AccelDeccelAmplitude* clone() const override;
    virtual AccelDeccelAmplitude* reverse() const override;
    
CC_CONSTRUCTOR_ACCESS:
    AccelDeccelAmplitude() {}
    virtual ~AccelDeccelAmplitude();
    
    /** 
    @brief Initializes the action with an inner action that has the amplitude property, and a duration time.
    @param action A pointer of the inner action.
    @param duration Specify the duration of the AccelDeccelAmplitude action.
    @return If the initialization success, return true; otherwise, return false.
    */
	/// 初始化
    bool initWithAction(Action *action, float duration);

protected:
    float _rate;
    ActionInterval *_other;

private:
    CC_DISALLOW_COPY_AND_ASSIGN(AccelDeccelAmplitude);
};

/**
@brief AccelAmplitude action.
@js NA
*/
/// 振幅动作
class CC_DLL AccelAmplitude : public ActionInterval
{
public:
    /** 
    @brief Create the action with an inner action that has the amplitude property, and a duration time.
    @param action A pointer of the inner action.
    @param duration Specify the duration of the AccelAmplitude action.
    @return Return a pointer of AccelAmplitude action. When the creation failed, return nil.
     */
	 /// 创建一个振幅动作
    static AccelAmplitude* create(Action *action, float duration);

    /** 
    @brief Get the value of amplitude rate.
    @return The value of amplitude rate.
    */
	/// 得到振幅的速率
    inline float getRate() const { return _rate; }
    /**
    @brief Set the value of amplitude rate.
    @param rate Specify the value of amplitude rate.
    */
	/// 设置振幅的速率
    inline void setRate(float rate) { _rate = rate; }

    // Overrides
	/// 继承自Action的方法
    virtual void startWithTarget(Node *target) override;
    virtual void update(float time) override;
    virtual AccelAmplitude* clone() const override;
    virtual AccelAmplitude* reverse() const override;
    
CC_CONSTRUCTOR_ACCESS:
    AccelAmplitude() {}
    virtual ~AccelAmplitude();
	/// 初始化
    bool initWithAction(Action *action, float duration);

protected:
    float _rate;/// 速率
    ActionInterval *_other;/// 其他瞬时动作

private:
    CC_DISALLOW_COPY_AND_ASSIGN(AccelAmplitude);
};

/**
@brief DeccelAmplitude action.
@js NA
*/
class CC_DLL DeccelAmplitude : public ActionInterval
{
public:
    /** 
    @brief Creates the action with an inner action that has the amplitude property, and a duration time.
    @param action A pointer of the inner action.
    @param duration Specify the duration of the DeccelAmplitude action.
    @return Return a pointer of DeccelAmplitude. When the creation failed, return nil.
    */
	/// 创建这个动作需要一个有振幅属性的动作和间隔时间
    static DeccelAmplitude* create(Action *action, float duration);

    /** 
    @brief Get the value of amplitude rate.
    @return The value of amplitude rate.
    */
	/// 得到振幅的速率
    inline float getRate() const { return _rate; }
    /**
    @brief Set the value of amplitude rate.
    @param rate Specify the value.
    */
	/// 设置振幅的速率
    inline void setRate(float rate) { _rate = rate; }

    // overrides
	/// 继承自Action的方法
    virtual void startWithTarget(Node *target) override;
    virtual void update(float time) override;
    virtual DeccelAmplitude* clone() const override;
    virtual DeccelAmplitude* reverse() const override;
    
CC_CONSTRUCTOR_ACCESS:
    DeccelAmplitude() {}
    virtual ~DeccelAmplitude();

    /** 
    @brief Initializes the action with an inner action that has the amplitude property, and a duration time.
    @param action The pointer of inner action.
    @param duration The duration of the DeccelAmplitude action.
    @return If the initilization sucess, return true; otherwise, return false.
    */
	/// 初始化
    bool initWithAction(Action *action, float duration);

protected:
    float _rate;
    ActionInterval *_other;

private:
    CC_DISALLOW_COPY_AND_ASSIGN(DeccelAmplitude);
};

/**
 @brief StopGrid action.
 @warning Don't call this action if another grid action is active.
 Call if you want to remove the the grid effect. Example:
 Sequence::actions(Lens::action(...), StopGrid::action(...), nullptr);
 */
 /// 停止网格特效
 /// 当另一个网格动作激活后,不要调用这个动作
 /// 当你想移除一个网格特效的时候,按例子中调用:
 /// Sequence::actions(Lens::action(...), StopGrid::action(...), nullptr);
class CC_DLL StopGrid : public ActionInstant
{
public:
    /** 
    @brief Create a StopGrid Action.
    @return Return a pointer of StopGrid. When the creation failed, return nil.
    */
	/// 创建一个停止网格特效的动作
    static StopGrid* create();

    // Overrides
	/// 继承自Action的方法
    virtual void startWithTarget(Node *target) override;
    virtual StopGrid* clone() const override;
    virtual StopGrid* reverse() const override;

CC_CONSTRUCTOR_ACCESS:
    StopGrid() {}
    virtual ~StopGrid() {}
    
protected:
    NodeGrid* _gridNodeTarget;
    /// 强制类型转换
    void cacheTargetAsGridNode();

private:
    CC_DISALLOW_COPY_AND_ASSIGN(StopGrid);
};

/** 
@brief ReuseGrid action.
*/
/// 重用网格动作
class CC_DLL ReuseGrid : public ActionInstant
{
public:
    /** 
    @brief Create an action with the number of times that the current grid will be reused.
    @param times Specify times the grid will be reused.
    @return Return a pointer of ReuseGrid. When the creation failed, return nil.
    */
	/// 创建一个动作通过这个网格将被重用几次
    static ReuseGrid* create(int times);

    // Override
	/// 继承自Action的方法
    virtual void startWithTarget(Node *target) override;
    virtual ReuseGrid* clone() const override;
    virtual ReuseGrid* reverse() const override;
    
CC_CONSTRUCTOR_ACCESS:
    ReuseGrid() {}
    virtual ~ReuseGrid() {}
    
    /** 
    @brief Initializes an action with the number of times that the current grid will be reused.
    @param times Specify times the grid will be reused.
    @return If the initialization sucess, return true; otherwise, return false.
    */
	/// 初始化:
	/// 网格将被重用指定的次数
    bool initWithTimes(int times);

protected:
    NodeGrid* _gridNodeTarget;
     /// 强制类型转换
    void cacheTargetAsGridNode();
    
    int _times;

private:
    CC_DISALLOW_COPY_AND_ASSIGN(ReuseGrid);
};

// end of actions group
/// @}

NS_CC_END

#endif // __ACTION_CCGRID_ACTION_H__


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值