本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 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__