cocos2d-x节点(CCActionInstant.h)API

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

cocos2d-x节点(CCActionInstant.h)API

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

// action 的显示、隐藏、翻转、定位

///cocos2d-x-3.0alpha0/cocos2dx/actions
// action 的显示、隐藏、翻转、定位


#ifndef __CCINSTANT_ACTION_H__
#define __CCINSTANT_ACTION_H__

#include <string>
#include <functional>

#include "CCStdC.h"
#include "CCAction.h"

NS_CC_BEGIN

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

/** 
@brief 即时 actions 立即执行 actions. 它们不具备持续时间类似 IntervalAction actions.
*/ 
class CC_DLL ActionInstant : public FiniteTimeAction //<NSCopying>
{
public:
    //
    // Overrides
    //
	virtual ActionInstant* clone() const override = 0;
    virtual ActionInstant * reverse(void) const override = 0;
    virtual bool isDone(void) const override;
    virtual void step(float dt) override;
    virtual void update(float time) override;
};

/** @brief Show the node
*/
class CC_DLL Show : public ActionInstant
{
public:
    /** 分配并初始化 action */
    static Show * create();

    Show(){}

    //
    // Overrides
    //
    virtual void update(float time) override;
    virtual ActionInstant* reverse(void) const override;
	virtual Show* clone() const override;
};

/** 
@brief Hide the node
*/
class CC_DLL Hide : public ActionInstant
{
public:
    /** 分配并初始化 action */
    static Hide * create();

    Hide(){}

    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual ActionInstant* reverse() const override;
	virtual Hide* clone() const override;
};

/** @brief 切换的节点的可见性
*/
class CC_DLL ToggleVisibility : public ActionInstant
{
public:
    /** 分配并初始化 action */
    static ToggleVisibility * create();

    ToggleVisibility(){}

    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual ToggleVisibility* reverse() const override;
	virtual ToggleVisibility* clone() const override;
};

/** 
@brief Remove the node
*/
class CC_DLL RemoveSelf : public ActionInstant
{
public:
	/** 创建 action */
	static RemoveSelf * create(bool isNeedCleanUp = true);

    RemoveSelf():_isNeedCleanUp(true)
	{}

	/** init the action */
	bool init(bool isNeedCleanUp);

	//
    // Override
    //
	virtual void update(float time) override;
	virtual RemoveSelf* clone() const override;
	virtual RemoveSelf* reverse() const override;

protected:
	bool _isNeedCleanUp;
};

/** 
@brief 水平翻转精灵
@since v0.99.0
*/
class CC_DLL FlipX : public ActionInstant
{
public:
    /** create the action */
    static FlipX * create(bool x);

    FlipX()
        :_flipX(false)
    {}

    /** init the action */
    bool initWithFlipX(bool x);

    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual FlipX* reverse() const override;
	virtual FlipX* clone() const override;

protected:
    bool    _flipX;
};

/** 
@brief 垂直翻转精灵
@since v0.99.0
*/
class CC_DLL FlipY : public ActionInstant
{
public:
    /** create the action */
    static FlipY * create(bool y);

    FlipY()
        :_flipY(false)
    {}

    /** init the action */
    bool initWithFlipY(bool y);

    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual FlipY* reverse() const override;
	virtual FlipY* clone() const override;

protected:
    bool    _flipY;
};

/** @brief 把节点放置在一个特定的位置
*/
class CC_DLL Place : public ActionInstant //<NSCopying>
{
public:
    Place(){}

    /** 使用 position 创建一个 action */
    static Place * create(const Point& pos);
    /** 使用 position 初始化一个 action */
    bool initWithPosition(const Point& pos);

    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual Place* reverse() const override;
	virtual Place* clone() const override;

protected:
    Point _position;
};


/** @brief 调用一个 'callback'
*/
class CC_DLL CallFunc : public ActionInstant //<NSCopying>
{
public:
	/** 使用 std::function<void()> 的回调类型 创建一个 action.
	 这是创建 callback 的首选方法.
     * 当这个函数绑定到 js or lua,输入参数会改变
     * In js: var create(var func, var this, var [data]) or var create(var func)
     * In lua:local create(local funcID)
	 */
    static CallFunc * create(const std::function<void()>& func);

    /** 使用 callback 创建一个 action

     typedef void (Object::*SEL_CallFunc)();
	 @过时不再需要建议使用新的 API ,可以使用 std::function 代替.
     * @js NA
     * @lua NA
     */
    CC_DEPRECATED_ATTRIBUTE static CallFunc * create(Object* pSelectorTarget, SEL_CallFunc selector);

public:
    /**
     * @js ctor
     */
    CallFunc()
        : _selectorTarget(NULL)
        , _callFunc(NULL)
		, _function(nullptr)
    {
    }
    /**
     * @js NA
     * @lua NA
     */
    virtual ~CallFunc();

	/** 使用 callback 初始化一个 action 
    typedef void (Object::*SEL_CallFunc)();
    @过时不再需要建议使用新的 API ,可以使用 std::function 代替.
    */
    CC_DEPRECATED_ATTRIBUTE bool initWithTarget(Object* pSelectorTarget);

	/** 使用 std::function<void()> 初始化一个 action
     * @js NK
     * @lua NK
	 */
    bool initWithFunction(const std::function<void()>& func);

    /** executes(执行) the callback */
    virtual void execute();

    inline Object* getTargetCallback()
    {
        return _selectorTarget;
    }

    inline void setTargetCallback(Object* pSel)
    {
        if (pSel != _selectorTarget)
        {
            CC_SAFE_RETAIN(pSel);
            CC_SAFE_RELEASE(_selectorTarget);
            _selectorTarget = pSel; 
        }
    }
    //
    // Overrides
    //
    virtual void update(float time) override;
	virtual CallFunc* reverse() const override;
	virtual CallFunc* clone() const override;

protected:
    /** Target 将会被调用 */
    Object*   _selectorTarget;

    union
    {
        SEL_CallFunc    _callFunc;
        SEL_CallFuncN    _callFuncN;
    };
    
    /** function 将会被调用 */
	std::function<void()> _function;
};

/** 
@brief 把 node 作为 'callback' 的第一个参数
N 意味着 Node
*/
class CC_DLL CallFuncN : public CallFunc
{
public:
    /**使用 std::function<void()> 的回调类型 创建一个 action.
	 这是创建 callback 的首选方法.
	 */
    static CallFuncN * create(const std::function<void(Node*)>& func);

    /** 使用 callback 创建一个 action 

    typedef void (Object::*SEL_CallFuncN)(Node*);
     @过时不再需要建议使用新的 API ,可以使用 std::function 代替.
    */
    CC_DEPRECATED_ATTRIBUTE static CallFuncN * create(Object* pSelectorTarget, SEL_CallFuncN selector);
public:
    CallFuncN():_functionN(nullptr){}

    /** 使用 std::function<void(Node*)> 初始化一个 action 
	 */
    bool initWithFunction(const std::function<void(Node*)>& func);

    /** 使用 callback 初始化一个 action

    typedef void (Object::*SEL_CallFuncN)(Node*);
    @过时不再需要建议使用新的 API ,可以使用 std::function 代替.
    */
    CC_DEPRECATED_ATTRIBUTE bool initWithTarget(Object* pSelectorTarget, SEL_CallFuncN selector);

    //
    // Overrides
    //
	virtual CallFuncN* clone() const override;
    virtual void execute() override;

protected:
    /** 函数调用时会把 "sender" 作为第一个参数传递进去 */
    std::function<void(Node*)> _functionN;
};

/**
 @过时不再需要建议使用新的 API ,可以使用 CallFuncN 代替.
 @brief 把节点作为 'callback' 的第一个参数,Node 的数据数据作为第二个参数
 * ND means: Node and Data. Data is void *, 它可能是任何东西.
 */

class CC_DLL  __CCCallFuncND : public CallFunc
{
public:
    /** 使用 callback、作为参数传递的数据 创建一个 action */
    CC_DEPRECATED_ATTRIBUTE static __CCCallFuncND * create(Object* selectorTarget, SEL_CallFuncND selector, void* d);
    
protected:
    /** 使用 callback、作为参数传递的数据 初始化一个 action */
    bool initWithTarget(Object* selectorTarget, SEL_CallFuncND selector, void* d);
    
public:
    //
    // Overrides
    //
	virtual __CCCallFuncND* clone() const override;
    virtual void execute() override;
    
protected:
    SEL_CallFuncND _callFuncND;
    void* _data;
};


/**
 @过时不再需要建议使用新的 API ,可以使用 CallFuncN 代替.
 @brief object 作为 'callback' 的第一个参数
 O means Object.
 @since v0.99.5
 */

class CC_DLL __CCCallFuncO : public CallFunc
{
public:
    /** 使用 callback 创建一个 action
     
     typedef void (Object::*SEL_CallFuncO)(Object*);
     */
    CC_DEPRECATED_ATTRIBUTE static __CCCallFuncO * create(Object* selectorTarget, SEL_CallFuncO selector, Object* object);
    /**
     * @js ctor
     */
    __CCCallFuncO();
    /**
     * @js NA
     * @lua NA
     */
    virtual ~__CCCallFuncO();
    
protected:
    /** 使用 callback 初始化一个 action
     
     typedef void (Object::*SEL_CallFuncO)(Object*);
     */
    bool initWithTarget(Object* selectorTarget, SEL_CallFuncO selector, Object* object);
    
public:
    //
    // Overrides
    //
	virtual __CCCallFuncO* clone() const override;
    virtual void execute() override;
    
    Object* getObject() const;
    void setObject(Object* obj);
    
protected:
    /** object 作为参数传递 */
    Object* _object;
    SEL_CallFuncO _callFuncO;
};

// end of actions group
/// @}

NS_CC_END

#endif //__CCINSTANT_ACTION_H__


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值