CCAnimation源码解析

来源:互联网 发布:ise女装官网淘宝网 编辑:程序博客网 时间:2024/06/16 04:13

帧动画:


源码:

/** @class AnimationFrame * * A frame of the animation. It contains information like: * - sprite frame name. * - # of delay units. * - offset  @since v2.0 */ /// 帧动画class CC_DLL AnimationFrame : public Ref, public Clonable{public:    /** @struct DisplayedEventInfo     * When the animation display,Dispatches the event of UserData.     */ /// 显示事件信息: /// 当动画显示时,发送的事件列表    struct DisplayedEventInfo    {        Node* target;        const ValueMap* userInfo;    };        /**     * Creates the animation frame with a spriteframe, number of delay units and a notification user info.     *     * @param spriteFrame The animation frame with a spriteframe.     * @param delayUnits Number of delay units.     * @param userInfo A notification user info.     * @since 3.0 /// 创建一个帧动画     */    static AnimationFrame* create(SpriteFrame* spriteFrame, float delayUnits, const ValueMap& userInfo);    /** Return a SpriteFrameName to be used.     *     * @return a SpriteFrameName to be used.     */ /// 返回一个使用的帧    SpriteFrame* getSpriteFrame() const { return _spriteFrame; };    /** Set the SpriteFrame.     *     * @param frame A SpriteFrame will be used.     */ /// 设置一个使用的帧    void setSpriteFrame(SpriteFrame* frame)    {        CC_SAFE_RETAIN(frame);        CC_SAFE_RELEASE(_spriteFrame);        _spriteFrame = frame;    }    /** Gets the units of time the frame takes.     *     * @return The units of time the frame takes.     */ /// 获取播放一帧需要的单位时间    float getDelayUnits() const { return _delayUnits; };        /** Sets the units of time the frame takes.     *     * @param delayUnits The units of time the frame takes.     */ /// 设置播放一帧需要的单位时间    void setDelayUnits(float delayUnits) { _delayUnits = delayUnits; };        /** @brief Gets user infomation     * A AnimationFrameDisplayedNotification notification will be broadcast when the frame is displayed with this dictionary as UserInfo.      * If UserInfo is nil, then no notification will be broadcast.     *     * @return A dictionary as UserInfo     */ /// 获取用户的信息 /// 一个帧动画显示通知将被广播,当帧用这个字典当作信息显示的时候    const ValueMap& getUserInfo() const { return _userInfo; };    ValueMap& getUserInfo() { return _userInfo; };        /** Sets user infomation.     * @param userInfo A dictionary as UserInfo.     */ /// 设置用户信息    void setUserInfo(const ValueMap& userInfo)    {        _userInfo = userInfo;    }        // Overridesvirtual AnimationFrame *clone() const override;    CC_CONSTRUCTOR_ACCESS:    /**     * @js ctor     */    AnimationFrame();    /**     * @js NA     * @lua NA     */    virtual ~AnimationFrame();        /** initializes the animation frame with a spriteframe, number of delay units and a notification user info *//// 初始化    bool initWithSpriteFrame(SpriteFrame* spriteFrame, float delayUnits, const ValueMap& userInfo);protected:        /** SpriteFrameName to be used */    SpriteFrame* _spriteFrame;    /**  how many units of time the frame takes */    float _delayUnits;    /**  A AnimationFrameDisplayedNotification notification will be broadcast when the frame is displayed with this dictionary as UserInfo. If UserInfo is nil, then no notification will be broadcast. */    ValueMap _userInfo;    private:    CC_DISALLOW_COPY_AND_ASSIGN(AnimationFrame);};/** @class Animation * A Animation object is used to perform animations on the Sprite objects. * The Animation object contains AnimationFrame objects, and a possible delay between the frames. * You can animate a Animation object by using the Animate action. Example: * @code * sprite->runAction(Animate::create(animation)); * @endcode*//// 动画/// 一个动画动作是用来执行精灵上的动画的/// 这个动画对新昂宝航动画帧,和两帧之间的时间间隔/// 你可以播放一个动画对象使用动画动作class CC_DLL Animation : public Ref, public Clonable{public:    /** Creates an animation.     * @since v0.99.5     */ /// 创建一个动画动作    static Animation* create(void);    /* Creates an animation with an array of SpriteFrame and a delay between frames in seconds.     * The frames will be added with one "delay unit".     * @since v0.99.5     * @param arrayOfSpriteFrameNames An array of SpriteFrame.     * @param delay A delay between frames in seconds.     * @param loops The times the animation is going to loop.     */ /// 创建帧动画动作    static Animation* createWithSpriteFrames(const Vector<SpriteFrame*>& arrayOfSpriteFrameNames, float delay = 0.0f, unsigned int loops = 1);    /* Creates an animation with an array of AnimationFrame, the delay per units in seconds and and how many times it should be executed.     * @since v2.0     * @param arrayOfAnimationFrameNames An animation with an array of AnimationFrame.     * @param delayPerUnit The delay per units in seconds and and how many times it should be executed.     * @param loops The times the animation is going to loop.     */    static Animation* create(const Vector<AnimationFrame*>& arrayOfAnimationFrameNames, float delayPerUnit, unsigned int loops = 1);    /** Adds a SpriteFrame to a Animation.     *     * @param frame The frame will be added with one "delay unit".     */ /// 添加动画帧    void addSpriteFrame(SpriteFrame *frame);    /** Adds a frame with an image filename. Internally it will create a SpriteFrame and it will add it.     * The frame will be added with one "delay unit".     * Added to facilitate the migration from v0.8 to v0.9.     * @param filename The path of SpriteFrame.     */ /// 将文件中的图片添加为动画帧    void addSpriteFrameWithFile(const std::string& filename);    /**     * @deprecated. Use addSpriteFrameWithFile() instead. @js NA     */    CC_DEPRECATED_ATTRIBUTE void addSpriteFrameWithFileName(const std::string& filename){ addSpriteFrameWithFile(filename);}    /** Adds a frame with a texture and a rect. Internally it will create a SpriteFrame and it will add it.     * The frame will be added with one "delay unit".     * Added to facilitate the migration from v0.8 to v0.9.     * @param pobTexture A frame with a texture.     * @param rect The Texture of rect.     */ /// 从texture中添加动画帧    void addSpriteFrameWithTexture(Texture2D* pobTexture, const Rect& rect);    /** Gets the total Delay units of the Animation.      *     * @return The total Delay units of the Animation.     */ /// 获取动画的总延迟单元。    float getTotalDelayUnits() const { return _totalDelayUnits; };        /** Sets the delay in seconds of the "delay unit".     *     * @param delayPerUnit The delay in seconds of the "delay unit".     */ /// 设置每个动画帧的延迟单元    void setDelayPerUnit(float delayPerUnit) { _delayPerUnit = delayPerUnit; };        /** Gets the delay in seconds of the "delay unit".     *      * @return The delay in seconds of the "delay unit".     */ /// 得到每个动画帧的延迟单元    float getDelayPerUnit() const { return _delayPerUnit; };        /** Gets the duration in seconds of the whole animation. It is the result of totalDelayUnits * delayPerUnit.     *     * @return Result of totalDelayUnits * delayPerUnit.     */ /// 得到动画的持续时间    float getDuration() const;        /** Gets the array of AnimationFrames.     *      * @return The array of AnimationFrames.     */ /// 得到动画的帧    const Vector<AnimationFrame*>& getFrames() const { return _frames; };        /** Sets the array of AnimationFrames.      *     * @param frames The array of AnimationFrames.     */ /// 设置动画的帧    void setFrames(const Vector<AnimationFrame*>& frames)    {        _frames = frames;    }        /** Checks whether to restore the original frame when animation finishes.      *     * @return Restore the original frame when animation finishes.     */ /// 是否复原原始帧(第一帧)    bool getRestoreOriginalFrame() const { return _restoreOriginalFrame; };        /** Sets whether to restore the original frame when animation finishes.      *     * @param restoreOriginalFrame Whether to restore the original frame when animation finishes.     */ /// 设置是否复原第一帧    void setRestoreOriginalFrame(bool restoreOriginalFrame) { _restoreOriginalFrame = restoreOriginalFrame; };        /** Gets the times the animation is going to loop. 0 means animation is not animated. 1, animation is executed one time, ...      *     * @return The times the animation is going to loop.     */ /// 返回重复次数    unsigned int getLoops() const { return _loops; };        /** Sets the times the animation is going to loop. 0 means animation is not animated. 1, animation is executed one time, ...      *     * @param loops The times the animation is going to loop.     */ /// 设置重复次数    void setLoops(unsigned int loops) { _loops = loops; };        // overridesvirtual Animation *clone() const override;    CC_CONSTRUCTOR_ACCESS:    Animation();    virtual ~Animation(void);        /** Initializes a Animation. *//// 初始化    bool init();        /** Initializes a Animation with frames and a delay between frames.     * @since v0.99.5     */ /// 通过帧初始化    bool initWithSpriteFrames(const Vector<SpriteFrame*>& arrayOfSpriteFrameNames, float delay = 0.0f, unsigned int loops = 1);        /** Initializes a Animation with AnimationFrame.     * @since v2.0     */    bool initWithAnimationFrames(const Vector<AnimationFrame*>& arrayOfAnimationFrameNames, float delayPerUnit, unsigned int loops);protected:    /** total Delay units of the Animation. */    float _totalDelayUnits;    /** Delay in seconds of the "delay unit". */    float _delayPerUnit;    /** duration in seconds of the whole animation. It is the result of totalDelayUnits * delayPerUnit. */    float _duration;    /** array of AnimationFrames. */    Vector<AnimationFrame*> _frames;    /** whether or not it shall restore the original frame when the animation finishes. */    bool _restoreOriginalFrame;    /** how many times the animation is going to loop. 0 means animation is not animated. 1, animation is executed one time, ... */    unsigned int _loops;    private:    CC_DISALLOW_COPY_AND_ASSIGN(Animation);};// end of sprite_nodes group/// @}


0 0
原创粉丝点击