cocos2d-x节点(CCActionCatmullRom.h)API

本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-x节点(CCActionCatmullRom.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

CatmullRom(卡特莫尔罗)action

///cocos2d-x-3.0alpha0/cocos2dx/actions
//CatmullRom(卡特莫尔罗)action
/*

 *
 *
 * Original code by Radu Gruian: http://www.codeproject.com/Articles/30838/Overhauser-Catmull-Rom-Splines-for-Camera-Animatio.So
 *
 * Adapted to cocos2d-x by Vit Valentin
 *
 * Adapted from cocos2d-x to cocos2d-iphone by Ricardo Quesada
 */


#ifndef __CCACTION_CATMULLROM_H__
#define __CCACTION_CATMULLROM_H__

#include <vector>

#include "CCActionInterval.h"
#include "base_nodes/CCNode.h"
#include "cocoa/CCGeometry.h"

NS_CC_BEGIN;

/**
 * @addtogroup actions
 * @{
 */

/** 一个包含控制点的 Array
 Used by CardinalSplineTo and (By) and CatmullRomTo (and By) actions.
@ingroup Actions        //圈内动作
 */
class CC_DLL PointArray : public Object, public Clonable
{
public:
    
    /** 创建并初始化一个点阵列(array)的容量
     * @js NA
     */
    static PointArray* create(unsigned int capacity);
    
    /**
     * @js NA
     * @lua NA
     */
    virtual ~PointArray();
    /**
     * @js NA
     * @lua NA
     */
    PointArray();
    
    /** 初始化 Catmull Rom 配置的提示容量
     * @js NA
     */
    bool initWithCapacity(unsigned int capacity);
    
    /** 附加一个控制点
     * @js NA
     */
    void addControlPoint(Point controlPoint);
    
    /** 在索引位置插入一个 controlPoint
     * @js NA
     */
    void insertControlPoint(Point &controlPoint, unsigned int index);
    
    /** 替换索引位置存在的 controlPoint
     * @js NA
     */
    void replaceControlPoint(Point &controlPoint, unsigned int index);
    
    /** 获取制定索引位置的 controlPoint 的值
     * @js NA
     */
    Point getControlPointAtIndex(unsigned int index);
    
    /** 删除给定索引位置的控制点
     * @js NA
     */
    void removeControlPointAtIndex(unsigned int index);
    
    /** returns 控制点对象的数目
     * @js NA
     */
    unsigned int count() const;
    
    /** returns 一个逆顺序的点阵(array)列副本,用户是负责释放这个副本
     * @js NA
     */
    PointArray* reverse() const;
    
    /** 逆转当前点阵列(array),而不会生成一个新的点阵列(array)
     * @js NA
     */
    void reverseInline();
    /**
     * @js NA
     * @lua NA
     */
    virtual PointArray* clone() const;
    /**
     * @js NA
     */
    const std::vector<Point*>* getControlPoints() const;
    /**
     * @js NA
     */
    void setControlPoints(std::vector<Point*> *controlPoints);
private:
    /** 一个包含控制点的 Array */
    std::vector<Point*> *_controlPoints;
};

/** Cardinal Spline path.       //三次Hermite样条/基数样条路径
 http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline
@ingroup Actions
 */
class CC_DLL CardinalSplineTo : public ActionInterval
{
public: 

    /** 使用 points(点阵列)、 tension(张力)、duration创建一个 action
     * @code
     * 当这个函数绑定到 js or lua,输入参数会改变
     * in js: var create(var t,var table)
     * in lua: lcaol create(local t, local table)
     * @endcode
     */
    static CardinalSplineTo* create(float duration, PointArray* points, float tension);
    /**
     * @js NA
     * @lua NA
     */
    virtual ~CardinalSplineTo();
    /**
     * @js NA
     * @lua NA
     */
    CardinalSplineTo();
    
    /** 使用点阵列(array)和持续时间,初始化一个 action */
    bool initWithDuration(float duration, PointArray* points, float tension);

    virtual void updatePosition(Point &newPos);

    inline PointArray* getPoints() { return _points; }
    /**
     * @js NA
     * @lua NA
     */
    inline void setPoints(PointArray* points)
    {
        CC_SAFE_RETAIN(points);
        CC_SAFE_RELEASE(_points);
        _points = points;
    }

    // Overrides
	virtual CardinalSplineTo *clone() const override;
    virtual CardinalSplineTo* reverse() const override;
    virtual void startWithTarget(Node *target) override;
    virtual void update(float time) override;

protected:
    /** 控制点阵列 */
    PointArray *_points;
    float _deltaT;
    float _tension;
    Point	_previousPosition;
    Point	_accumulatedDiff;

};

/** Cardinal Spline path.             //三次Hermite样条/基数样条路径
 http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline
 @ingroup Actions
 */
class CC_DLL CardinalSplineBy : public CardinalSplineTo 
{
public:
    
    /** 使用 points(点阵列)、 tension(张力)、duration创建一个 action
     * @code
     * 当这个函数绑定到 js or lua,输入参数会改变
     * in js: var create(var t,var table)
     * in lua: lcaol create(local t, local table)
     * @endcode
     */
    static CardinalSplineBy* create(float duration, PointArray* points, float tension);

    CardinalSplineBy();
    
    // Overrides
    virtual void startWithTarget(Node *target) override;
    virtual void updatePosition(Point &newPos) override;
	virtual CardinalSplineBy *clone() const override;
    virtual CardinalSplineBy* reverse() const override;

protected:
    Point _startPosition;
};

/** 使用 CatmullRom curve(卡特莫尔罗曲线)把目标移动到目标点
 Catmull Rom (卡特莫尔罗)是一个 tension(张力)是 0.5 的 Cardinal Spline (基数样条)
 http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline
 @ingroup Actions
 */
class CC_DLL CatmullRomTo : public CardinalSplineTo
{
public:
    
    /** 使用 points、 tension(张力)创建一个 action
     * @code
     * 当这个函数绑定到 js or lua,输入参数会改变
     * in js: var create(var dt,var table)
     * in lua: lcaol create(local dt, local table)
     * @endcode
     */
    static CatmullRomTo* create(float dt, PointArray* points);

    /** 使用 points(点阵列)、duration创建一个 action */
    bool initWithDuration(float dt, PointArray* points);

    // Override
	virtual CatmullRomTo *clone() const override;
	virtual CatmullRomTo *reverse() const override;
};

/** 使用 CatmullRom curve(卡特莫尔罗曲线)把目标移动
Catmull Rom (卡特莫尔罗)是一个 tension(张力)是 0.5 的 Cardinal Spline (基数样条)
 http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline
 @ingroup Actions
 */
class CC_DLL CatmullRomBy : public CardinalSplineBy
{
public:
    /** 使用 points(点阵列)、 tension(张力)、duration创建一个 action
     * @code
     * 当这个函数绑定到 js or lua,输入参数会改变
     * in js: var create(var dt,var table)
     * in lua: lcaol create(local dt, local table)
     * @endcode
     */
    static CatmullRomBy* create(float dt, PointArray* points);

    /** 使用 points(点阵列)、duration创建一个 action */
    bool initWithDuration(float dt, PointArray* points);

    // Override
	virtual CatmullRomBy *clone() const override;
	virtual CatmullRomBy *reverse() const override;

};

/** Returns 根据给定的 控制点、tension(张力)、time 返回 Cardinal Spline 的位置 */
extern CC_DLL Point ccCardinalSplineAt(Point &p0, Point &p1, Point &p2, Point &p3, float tension, float t);

// end of actions group
/// @}

NS_CC_END;

#endif // __CCACTION_CATMULLROM_H__




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值