本文来自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__