帧动画:
源码:
/** @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;
}
// Overrides
virtual 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; };
// overrides
virtual 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
/// @}