#ifndef __CCB_CCBANIMATION_MANAGER_H__

#define __CCB_CCBANIMATION_MANAGER_H__

#include "cocos2d.h"

#include "ExtensionMacros.h"

#include "CCBSequence.h"

#include "CCBValue.h"

#include "CCBSequenceProperty.h"

NS_CC_EXT_BEGIN

class CCBAnimationManagerDelegate

{

public:

virtual void completedAnimationSequenceNamed(const char *name) = 0;

};

class CCBAnimationManager : public CCObject

{

private:

CCArray *mSequences;

CCDictionary *mNodeSequences;

CCDictionary *mBaseValues;

int mAutoPlaySequenceId;

CCNode *mRootNode;

CCSize mRootContainerSize;

CCBAnimationManagerDelegate *mDelegate;

CCBSequence *mRunningSequence;

CCArray *mDocumentOutletNames;

CCArray *mDocumentOutletNodes;

CCArray *mDocumentCallbackNames;

CCArray *mDocumentCallbackNodes;

CCArray *mKeyframeCallbacks;

CCDictionary *mKeyframeCallFuncs;

std::string mDocumentControllerName;

std::string lastCompletedSequenceName;

SEL_CallFunc mAnimationCompleteCallbackFunc;

CCObject *mTarget;

public:

bool jsControlled;

CCBAnimationManager();

~CCBAnimationManager();

CCObject *mOwner;

virtual bool init();

CCArray* getSequences();

void setSequences(CCArray* seq);

int getAutoPlaySequenceId();

void setAutoPlaySequenceId(int autoPlaySequenceId);

CCNode* getRootNode();

void setRootNode(CCNode* pRootNode); // weak reference

void addDocumentCallbackNode(CCNode *node);

void addDocumentCallbackName(std::string name);

void addDocumentOutletNode(CCNode *node);

void addDocumentOutletName(std::string name);

void setDocumentControllerName(const std::string &name);

std::string getDocumentControllerName();

CCArray* getDocumentCallbackNames();

CCArray* getDocumentCallbackNodes();

CCArray* getDocumentOutletNames();

CCArray* getDocumentOutletNodes();

std::string getLastCompletedSequenceName();

CCArray* getKeyframeCallbacks();

const CCSize& getRootContainerSize();

void setRootContainerSize(const CCSize &rootContainerSize);

CCBAnimationManagerDelegate* getDelegate();

void setDelegate(CCBAnimationManagerDelegate* pDelegate); // retain

const char* getRunningSequenceName();

const CCSize& getContainerSize(CCNode* pNode);

void addNode(CCNode *pNode, CCDictionary *pSeq);

void setBaseValue(CCObject *pValue, CCNode *pNode, const char *pPropName);

void moveAnimationsFromNode(CCNode* fromNode, CCNode* toNode);

/** @deprecated This interface will be deprecated sooner or later.*/

CC_DEPRECATED_ATTRIBUTE void runAnimations(const char *pName, float fTweenDuration);

/** @deprecated This interface will be deprecated sooner or later.*/

CC_DEPRECATED_ATTRIBUTE void runAnimations(const char *pName);

/** @deprecated This interface will be deprecated sooner or later.*/

CC_DEPRECATED_ATTRIBUTE void runAnimations(int nSeqId, float fTweenDuraiton);

void runAnimationsForSequenceNamedTweenDuration(const char *pName, float fTweenDuration);

void runAnimationsForSequenceNamed(const char *pName);

void runAnimationsForSequenceIdTweenDuration(int nSeqId, float fTweenDuraiton);

void setAnimationCompletedCallback(CCObject *target, SEL_CallFunc callbackFunc);

void debug();

void setCallFunc(CCCallFunc *callFunc, const std::string &callbackNamed);

CCObject* actionForCallbackChannel(CCBSequenceProperty* channel);

CCObject* actionForSoundChannel(CCBSequenceProperty* channel);

private:

CCObject* getBaseValue(CCNode *pNode, const char* pPropName);

int getSequenceId(const char* pSequenceName);

CCBSequence* getSequence(int nSequenceId);

CCActionInterval* getAction(CCBKeyframe *pKeyframe0, CCBKeyframe *pKeyframe1, const char *pPropName, CCNode *pNode);

void setAnimatedProperty(const char *pPropName, CCNode *pNode, CCObject *pValue, float fTweenDuraion);

void setFirstFrame(CCNode *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);

CCActionInterval* getEaseAction(CCActionInterval *pAction, int nEasingType, float fEasingOpt);

void runAction(CCNode *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);

void sequenceCompleted();

};

class CCBSetSpriteFrame : public CCActionInstant

{

private:

CCSpriteFrame *mSpriteFrame;

public:

~CCBSetSpriteFrame();

/** creates a Place action with a position */

static CCBSetSpriteFrame* create(CCSpriteFrame *pSpriteFrame);

bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);

virtual void update(float time);

virtual CCObject* copyWithZone(CCZone *pZone);

};

class CCBSoundEffect : public CCActionInstant

{

private:

std::string mSoundFile;

float mPitch, mPan, mGain;

public:

~CCBSoundEffect();

static CCBSoundEffect* actionWithSoundFile(const std::string &file, float pitch, float pan, float gain);

bool initWithSoundFile(const std::string &file, float pitch, float pan, float gain);

virtual void update(float time);

virtual CCObject* copyWithZone(CCZone *pZone);

};

class CCBRotateTo : public CCActionInterval

{

private:

float mStartAngle;

float mDstAngle;

float mDiffAngle;

public:

static CCBRotateTo* create(float fDuration, float fAngle);

bool initWithDuration(float fDuration, float fAngle);

virtual void update(float time);

virtual CCObject* copyWithZone(CCZone *pZone);

virtual void startWithTarget(CCNode *pNode);

};

class CCBRotateXTo: public CCActionInterval {

private:

float mStartAngle;

float mDstAngle;

float mDiffAngle;

public:

static CCBRotateXTo* create(float fDuration, float fAngle);

bool initWithDuration(float fDuration, float fAngle);

virtual void startWithTarget(CCNode *pNode);

virtual CCObject* copyWithZone(CCZone *pZone);

virtual void update(float time);

};

class CCBRotateYTo: public CCActionInterval {

private:

float mStartAngle;

float mDstAngle;

float mDiffAngle;

public:

static CCBRotateYTo* create(float fDuration, float fAngle);

bool initWithDuration(float fDuration, float fAngle);

virtual void startWithTarget(CCNode *pNode);

virtual CCObject* copyWithZone(CCZone *pZone);

virtual void update(float time);

};

class CCBEaseInstant : public CCActionEase

{

public:

static CCBEaseInstant* create(CCActionInterval *pAction);

virtual void update(float dt);

};

NS_CC_EXT_END

#endif // __CCB_CCBANIMATION_MANAGER_H__


CCBAnimationManager的更多相关文章

  1. Cocos2d-x游戏开发CCBAnimationManager控制动画

    CocosBuilder能方便的编辑各种动画.大部分动画都是以独立片段的形式存在的. 须要由程序来控制何时播放. 管理ccbi文件的动画播放有个专门的类:CCBAnimationManager 大致的 ...

  2. 当编译CCBReader时出现 “ CCBAnimationManager.m Use of undeclared identifier 'other‘ ” 解决方法

    第一种解决方法是去github上下载最新的CCBReader 第二种解决方法是把other替换成self.inner 建议用新版本的

  3. Cocos2d-x——CocosBuilder官方帮助文档翻译3 动画

    Working with Animations 动画 You can use CocosBuilder for creating character animations, animating com ...

  4. CCBReader

    #ifndef _CCB_CCBREADER_H_ #define _CCB_CCBREADER_H_ #include "cocos2d.h" #include "Ex ...

  5. cocosBuilder使用总结

    原创,转载请注明出处! 基本流程 >=-. 准备工作 #. 把一个项目场景相关的,相对独立(别的场景用不到)的碎图,用TexturePack拼接成大的png图片文件及plist数据字处理文件 # ...

  6. cocos2d-x绑定ccb文件

    首先,ccb文件是如何生成的,我就不多说了,大家可以搜下cocosbuilder,就能找的相关的教程,而通过cocosbuilder,我们可以省去了很多设计的麻烦,比如设计一个精灵的位置啥的,而通过c ...

  7. SpriteBuilder中音频波长超过Timeline结尾的情况

    见如下图: 注意最后一个音频波长延续到Timeline结尾之后.表明这个音频文件播放长度超过Timeline(动画)播放的长度.这是否成为一个问题要视情况而定.而在这里无所谓. 如果节点所拥有的Tim ...

  8. cocos2d-x开发记录:二,基本概念(骨骼动画)

    九,骨骼动画 1.骨骼动画vs Sprite sheets 你能使用sprite sheets 创建动画,它很快又容易.直到你意识到你的游戏需要大量的动画并且内存消耗越来越高,并且需要时间载入全部数据 ...

  9. 改进cocos2dx中lua读ccb的方法

    cocos2dx自带的CCBProxy真弱,还好提供了一个CCBReaderLoader.lua,但是也不好用, 于是修改了一下CCBReaderLoader,下面直接贴代码了. function N ...

随机推荐

  1. ASP.NET MVC 路由学习

    参考 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_2.html 说明 1."解决与物理路径的冲突"这段教程这里如果不起 ...

  2. Linux下配置MySQL需要注意的几点

    1.为mysql加上连接数,linux下最大能允许8000个mysql连接. 经验下,设置为3000 [mysqld] max_connections=3000

  3. HTML相对路径相对目录--上级目录及下级目录的写法

    如何表示上级目录 ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推. 假设info.html路径是:c:/Inetpub/wwwroot/sites/blab ...

  4. 【AtCoder】ARC085

    C - HSI 题解 \(E = 1900 * (N - M) + 100 * M + \frac{1}{2^{M}} E\) \(E = 2^{M}(1900 * (N - M) + 100 * M ...

  5. JAVAssist字节码操作

    Java动态性的两种常见实现方式 字节码操作 反射 运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改  新的属性/方法) 优势: 比反射开销小,性能高 ...

  6. 【LeetCode】74. Search a 2D Matrix

    Difficulty:medium  More:[目录]LeetCode Java实现 Description Write an efficient algorithm that searches f ...

  7. Qt代码创建分隔条

    我们在使用Qt时,会发现在使用UI界面时可以添加窗口分隔条,但我们使用纯代码时却没有分隔条的类函数.这时候我们就需要手动添加,添加方式和Qt自定义标签按钮一样,下面我直接写代码.如果不知道怎么添加的, ...

  8. 【Ray Tracing The Next Week 超详解】 光线追踪2-1

     Preface 博主刚放假回家就进了医院,今天刚完事儿,来续写第二本书  Ready 我们来总结一下上一本书的笔记中我们的一些规定 1. 数学表达式 我们采用小写粗黑体代表向量,大写粗黑体代表矩阵, ...

  9. ArduinoYun教程之ArduinoYun硬件介绍

    ArduinoYun教程之ArduinoYun硬件介绍 ArduinoYun的电源插座 Arduino Yun有两排插座,这些插座可以按类型分为三类:电源.数字IO和模拟输入.电源部分主要集中在如图1 ...

  10. 【BZOJ 3028】 3028: 食物 (生成函数)

    3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 569  Solved: 382 Description 明明这次又要出去旅游了,和上次 ...