CCActionTween,CCAnimationCache源码分析
2015-08-24 23:27
603 查看
CCActionTween:补间动画
CCAnimationCache:动画缓存区
源码:
/** @brief The delegate class for ActionTween. @details If you want to use ActionTween on a node. You should implement the node follow these steps: 1. The node should be inherit from ActionTweenDelegate. 2. Override the virtual method updateTweenAction in the node. Then once you running ActionTween on the node, the method updateTweenAction will be incoked. */ /// 补间动画的委托类 /// 如果你想在一个节点上使用补间动画 /// 你应该按如下步骤实现: /// 1.这个节点应该继承自补间动画委托类(ActionTweenDelegate) /// 2.在节点中重载updateTweenAction方法 /// 然后,当你的节点执行补间动画的时候,updateTweenAction将被调用 class CC_DLL ActionTweenDelegate { public: /** * @js NA * @lua NA */ virtual ~ActionTweenDelegate() {} /** @brief The callback function when ActionTween is running. @param value The new value of the specified key. @param key The key of property which should be updated. */ /// 更新补间动画 virtual void updateTweenAction(float value, const std::string& key) = 0; }; /** ActionTween ActionTween is an action that lets you update any property of an object. For example, if you want to modify the "width" property of a target from 200 to 300 in 2 seconds, then: @code auto modifyWidth = ActionTween::create(2, "width", 200, 300); target->runAction(modifyWidth); @endcode Another example: ScaleTo action could be rewritten using PropertyAction: @code // scaleA and scaleB are equivalents auto scaleA = ScaleTo::create(2, 3); // (duration, to) auto scaleB = ActionTween::create(2, "scale", 1, 3); // (duration, key, from, to) @endcode @since v0.99.2 */ /// 补间动画 class CC_DLL ActionTween : public ActionInterval { public: /** * @brief Create and initializes the action with the property name (key), and the from and to parameters. * @param duration The duration of the ActionTween. It's a value in seconds. * @param key The key of property which should be updated. * @param from The value of the specified property when the action begin. * @param to The value of the specified property when the action end. * @return If the creation success, return a pointer of ActionTween; otherwise, return nil. */ /// 创建一个补间动画 static ActionTween* create(float duration, const std::string& key, float from, float to); // Overrides void startWithTarget(Node *target) override; void update(float dt) override; ActionTween* reverse() const override; ActionTween *clone() const override; CC_CONSTRUCTOR_ACCESS: /** * @brief Initializes the action with the property name (key), and the from and to parameters. * @param duration The duration of the ActionTween. It's a value in seconds. * @param key The key of property which should be updated. * @param from The value of the specified property when the action begin. * @param to The value of the specified property when the action end. * @return If the initialization success, return true; otherwise, return false. */ /// 初始化 bool initWithDuration(float duration, const std::string& key, float from, float to); protected: std::string _key; float _from, _to; float _delta; };
CCAnimationCache:动画缓存区
源码:
/** Singleton that manages the Animations. It saves in a cache the animations. You should use this class if you want to save your animations in a cache. Before v0.99.5, the recommend way was to save them on the Sprite. Since v0.99.5, you should use this class instead. @since v0.99.5 @js cc.animationCache */ /// 动画快速缓存区 /// 这是一个单例,他保存了一个动画的缓存区,如果你想把你的动画存入缓存区,那么你应该用这个方法。 class CC_DLL AnimationCache : public Ref { public: /** * @js ctor */ AnimationCache(); /** * @js NA * @lua NA */ ~AnimationCache(); /** Returns the shared instance of the Animation cache @js NA */ /// 单例 static AnimationCache* getInstance(); /** Purges the cache. It releases all the Animation objects and the shared instance. @js NA */ /// 销毁单例 static void destroyInstance(); /** @deprecated Use getInstance() instead. */ CC_DEPRECATED_ATTRIBUTE static AnimationCache* sharedAnimationCache() { return AnimationCache::getInstance(); } /** @deprecated Use destroyInstance() instead. */ CC_DEPRECATED_ATTRIBUTE static void purgeSharedAnimationCache() { return AnimationCache::destroyInstance(); } bool init(void); /** Adds a Animation with a name. * * @param animation An animation. * @param name The name of animation. */ /// 添加动画 void addAnimation(Animation *animation, const std::string& name); /** Deletes a Animation from the cache. * * @param name The name of animation. */ /// 移除动画 void removeAnimation(const std::string& name); /** @deprecated. Use removeAnimation() instead * @js NA * @lua NA */ CC_DEPRECATED_ATTRIBUTE void removeAnimationByName(const std::string& name){ removeAnimation(name);} /** Returns a Animation that was previously added. * If the name is not found it will return nil. * You should retain the returned copy if you are going to use it. * * @return A Animation that was previously added. If the name is not found it will return nil. */ /// 得到一个动画 Animation* getAnimation(const std::string& name); /** * @deprecated. Use getAnimation() instead * @js NA * @lua NA */ CC_DEPRECATED_ATTRIBUTE Animation* animationByName(const std::string& name){ return getAnimation(name); } /** Adds an animation from an NSDictionary. * Make sure that the frames were previously loaded in the SpriteFrameCache. * @param dictionary An NSDictionary. * @param plist The path of the relative file,it use to find the plist path for load SpriteFrames. * @since v1.1 @js NA */ /// 添加字典中的动画 void addAnimationsWithDictionary(const ValueMap& dictionary,const std::string& plist); /** Adds an animation from a plist file. * Make sure that the frames were previously loaded in the SpriteFrameCache. * @since v1.1 * @js addAnimations * @lua addAnimations * @param plist An animation from a plist file. */ /// 添加文件中的动画 void addAnimationsWithFile(const std::string& plist); private: /// 解析 void parseVersion1(const ValueMap& animations); void parseVersion2(const ValueMap& animations); private: Map<std::string, Animation*> _animations; static AnimationCache* s_sharedAnimationCache; }; // end of sprite_nodes group /// @}
相关文章推荐
- 使用mvn archetype:generate生产maven工程,响应很慢
- UVa-679 Dropping Balls
- 启动maven项目报错:java.lang.ClassNotFoundException: ContextLoaderListener解决方法
- 一次重定向引起的异步IO
- 简单演示Exploit SEH原理(未开启SafeSEH模块)
- UVA 11475 Extend to Palindrome(字符hash)
- 华为上机试题5(整数排序并删除一些元素)
- 推荐两个比较全的android在线源代码
- Hashtable
- 神经网络模型算法与生物神经网络的最新联系
- 猜拳游戏--最高效版本
- Linux环境下【mysql】修改mysql5.5默认编码
- Swift 语言基础算法
- Set
- [BZOJ1046][HAOI2007]上升序列
- MySQL简易建立餐厅数据库
- 面试题之:String,StringBuffer与StringBuilder的区别?
- 移除系统自带的tabBarItem
- 字符数粗的输出
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B