cocos2d-x节点(CCAnimation.h)API

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

cocos2d-x节点(CCAnimation.h)API

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

//创建帧动画

///cocos2d-x-3.0alpha0/cocos2dx/sprite_nodes
//创建帧动画

#ifndef __CC_ANIMATION_H__
#define __CC_ANIMATION_H__

#include "platform/CCPlatformConfig.h"
#include "cocoa/CCObject.h"
#include "cocoa/CCArray.h"
#include "cocoa/CCDictionary.h"
#include "cocoa/CCGeometry.h"
#include "CCSpriteFrame.h"
#include <string>

NS_CC_BEGIN

class Texture2D;
class SpriteFrame;

/**
 * @addtogroup sprite_nodes
 * @{
 */

/** AnimationFrame
 一帧动画。它包含的信息,如:
    - sprite frame name             //精灵的框架名称
    - # of delay units.             //延迟单元
    - offset                        //偏移
 
 @since v2.0
 */
class CC_DLL AnimationFrame : public Object, public Clonable
{
public:
    /**
     * @js ctor
     */
    AnimationFrame();
    /**
     * @js NA
     * @lua NA
     */
    virtual ~AnimationFrame();

    /** 使用 spriteframe,延迟单元数,用户通知 初始化一个帧动画 */
    bool initWithSpriteFrame(SpriteFrame* spriteFrame, float delayUnits, Dictionary* userInfo);

    SpriteFrame* getSpriteFrame() const { return _spriteFrame; };
    
    void setSpriteFrame(SpriteFrame* frame)
    {
        CC_SAFE_RETAIN(frame);
        CC_SAFE_RELEASE(_spriteFrame);
        _spriteFrame = frame;
    }

    /** 获取帧需要的单位时间 */
    float getDelayUnits() const { return _delayUnits; };
    
    /** Sets 帧需要的单位时间 */ 
    void setDelayUnits(float delayUnits) { _delayUnits = delayUnits; };
    
    /** @brief 获取用户详细资料
        框架显示本字典的用户信息,一个AnimationFrameDisplayedNotification通知会广播,如果用户信息是 nil,那么没有通知将播出
     */
    Dictionary* getUserInfo() const { return _userInfo; };
    
    /** Sets user infomation */
    void setUserInfo(Dictionary* userInfo)
    {
        CC_SAFE_RETAIN(userInfo);
        CC_SAFE_RELEASE(_userInfo);
        _userInfo = userInfo;
    }
    
    // Overrides
	virtual AnimationFrame *clone() const override;

protected:
    /** SpriteFrameName to be used */
    SpriteFrame* _spriteFrame;

    /**  帧需要的单位时间  */
    float _delayUnits;

    /**  框架显示本字典的用户信息,一个AnimationFrameDisplayedNotification通知会广播,如果用户信息是 nil,那么没有通知将播出
     . */
    Dictionary* _userInfo;
};




/** 动画对象用于执行Sprite动画.

动画的对象包含 AnimationFrame 对象, 帧之间的延迟.
您可以通过使用动画动作作为动画对象. Example:

@code
    sprite->runAction(Animate::create(animation));
@endcode

*/
class CC_DLL Animation : public Object, public Clonable
{
public:
    /** Creates an animation
     @since v0.99.5
     */
    static Animation* create(void);

    /* 使用 AnimationFrame 数组,帧之间的延迟 创建一个动画
     将在帧上添加一个 "delay unit".
     @since v0.99.5
     */
    static Animation* createWithSpriteFrames(Array* arrayOfSpriteFrameNames, float delay = 0.0f);

    /* 使用 AnimationFrame 数组,帧之间的延迟(每隔多久会执行) 创建一个动画
     @since v2.0
     * @js NA
     */
    static Animation* create(Array *arrayOfAnimationFrameNames, float delayPerUnit, unsigned int loops = 1);
    /**
     * @js ctor
     */
    Animation();
    /**
     * @js NA
     * @lua NA
     */
    virtual ~Animation(void);

    bool init();

    /** 使用 Frame,帧之间的延迟(每隔多久会执行) 初始化一个动画
    @since v0.99.5
    */
    bool initWithSpriteFrames(Array *pFrames, float delay = 0.0f);

    /** 使用 AnimationFrame 初始化一个动画
    @since v2.0
    */
    bool initWithAnimationFrames(Array* arrayOfAnimationFrames, float delayPerUnit, unsigned int loops);

    /** 添加一个 SpriteFrame 到一个 Animation
     将在帧上添加一个 "delay unit".
     */
    void addSpriteFrame(SpriteFrame *pFrame);

    /** Adds a frame with an image filename. 内部它将创建一个SpriteFrame并添加它
     将在帧上添加一个 "delay unit".
     Added to facilitate the migration from v0.8 to v0.9.
     */
    void addSpriteFrameWithFile(const char *filename);
    /**
     @deprecated. Use addSpriteFrameWithFile() instead
     */
    CC_DEPRECATED_ATTRIBUTE void addSpriteFrameWithFileName(const char *filename){ addSpriteFrameWithFile(filename);}

    /** Adds a frame with a texture and a rect. 内部它将创建一个SpriteFrame并添加它
     将在帧上添加一个 "delay unit".
     加入它帮助你从V0.8迁移到V0.9.
     */
    void addSpriteFrameWithTexture(Texture2D* pobTexture, const Rect& rect);

    /** Gets 单元动画总延迟. */
    float getTotalDelayUnits() const { return _totalDelayUnits; };
    
    /** Sets "delay unit"(延迟单元) 以秒为单位 */
    void setDelayPerUnit(float delayPerUnit) { _delayPerUnit = delayPerUnit; };
    
    /** Gets "delay unit"(延迟单元) 以秒为单位 */
    float getDelayPerUnit() const { return _delayPerUnit; };

    
    /** Gets 整个动画的持续时间以秒为单位。它的结果是的 totalDelayUnits * delayPerUnit */
    float getDuration() const;
    
    /** Gets the array of AnimationFrames */
    Array* getFrames() const { return _frames; };
    
    /** Sets the array of AnimationFrames */
    void setFrames(Array* frames)
    {
        CC_SAFE_RETAIN(frames);
        CC_SAFE_RELEASE(_frames);
        _frames = frames;
    }
    
    /** Checks 完成动画时,是否恢复原来的帧. */
    bool getRestoreOriginalFrame() const { return _restoreOriginalFrame; };
    
    /** Sets 完成动画时,是否恢复原来的帧 */
    void setRestoreOriginalFrame(bool restoreOriginalFrame) { _restoreOriginalFrame = restoreOriginalFrame; };
    
    /** Gets 循环动画。 0表示动画不是动画。 1,动画执行一次, ... */
    unsigned int getLoops() const { return _loops; };
    
    /** Sets 循环动画。 0表示动画不是动画。 1,动画执行一次, ... */
    void setLoops(unsigned int loops) { _loops = loops; };
    
    // overrides
	virtual Animation *clone() const override;

protected:
    /** 动画总共有多少个延迟单元. */
    float _totalDelayUnits;

    /** Delay in seconds of the "delay unit" */
    float _delayPerUnit;

    /** 整个动画的持续时间以秒为单位。它的结果是的 totalDelayUnits * delayPerUnit */
    float _duration;

    /** array of AnimationFrames */
    Array* _frames;

    /** 完成时是否应恢复原来的帧动画 */
    bool _restoreOriginalFrame;

    /** 多少次循环动画。 0表示动画不是动画。 1,动画执行一次, ... */
    unsigned int _loops;
};

// end of sprite_nodes group
/// @}

NS_CC_END

#endif // __CC_ANIMATION_H__


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值