91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2d-x 自建動畫管理器AnimationManager的方法和使用

發布時間:2020-07-29 08:51:19 來源:網絡 閱讀:1233 作者:83628410 欄目:游戲開發

代碼出自魔塔

使用方法在代碼后幾行

  1. //**********animation.h**************  
  2. #ifndef _ANIMATION_MANAGER_H_  
  3. #define _ANIMATION_MANAGER_H_  
  4.  
  5. #include "MTGame.h"  
  6.  
  7. using namespace cocos2d;  
  8. //地方寫的有點不太對,寫在一個全局變量里比較好  
  9. typedef enum {  
  10.     kDown =  0,//向下方向  
  11.     kLeft = 1,//向左方向  
  12.     kRight= 2,//向右方向  
  13.     kUp = 3,//向上方向  
  14.     kNormal,  
  15. } HeroDirection;//勇士方向  
  16.  
  17. typedef enum 
  18. {  
  19.     kNone = 1,//可以通行  
  20.     kWall,//墻  
  21.     kEnemy,//敵人  
  22.     kItem,//物品  
  23.     kDoor,//門  
  24.     kNPC,//npc  
  25.     kTeleport,//傳送點  
  26. } CollisionType;//碰撞類型  
  27.  
  28. typedef enum 
  29. {  
  30.     aDown = 0,//向下行走動畫  
  31.     aLeft,//向左行走動畫  
  32.     aRight,//向右行走動畫  
  33.     aUp,//向上行走動畫  
  34.     aFight,//刀光動畫  
  35. } AnimationKey;//動畫模版鍵值  
  36.  
  37. class AnimationManager : public Singleton<AnimationManager>  
  38. {  
  39. public:  
  40.     AnimationManager();  
  41.     ~AnimationManager();  
  42.     //初始化動畫模版緩存表  
  43.     bool initAnimationMap();  
  44.     //根據名字得到一個動畫模板  
  45.     CCAnimation* getAnimation(int key);  
  46.     //創建一個動畫實例  
  47.     CCAnimate* createAnimate(int key);  
  48.     //創建一個動畫實例  
  49.     CCAnimate* createAnimate(const char* key);  
  50. protected:  
  51.     //加載勇士行走動畫模版  
  52.     CCAnimation* createHeroMovingAnimationByDirection(HeroDirection direction);  
  53.     CCAnimation* createFightAnimation();  
  54.     CCAnimation* createNPCAnimation();  
  55. };  
  56. //定義動畫管理器實例的別名  
  57. #define sAnimationMgr AnimationManager::instance()  
  58.  
  59. #endif  
  60. //*********************animation.cpp**************************  
  61. #include "AnimationManager.h"  
  62.  
  63. DECLARE_SINGLETON_MEMBER(AnimationManager);  
  64.  
  65. AnimationManager::AnimationManager()  
  66. {  
  67. }  
  68.  
  69. AnimationManager::~AnimationManager()  
  70. {  
  71.     //CCDirector會自己清除AnimationCache  
  72.     //CCAnimationCache::purgeSharedAnimationCache();  
  73. }  
  74.  
  75. bool AnimationManager::initAnimationMap()  
  76. {  
  77.     char temp[20];  
  78.     sprintf(temp, "%d", aDown);  
  79.     //加載勇士向下走的動畫  
  80.     CCAnimationCache::sharedAnimationCache()->addAnimation(createHeroMovingAnimationByDirection(kDown), temp);  
  81.     sprintf(temp, "%d", aRight);  
  82.     //加載勇士向右走的動畫  
  83.     CCAnimationCache::sharedAnimationCache()->addAnimation(createHeroMovingAnimationByDirection(kRight), temp);  
  84.     sprintf(temp, "%d", aLeft);  
  85.     //加載勇士向左走的動畫  
  86.     CCAnimationCache::sharedAnimationCache()->addAnimation(createHeroMovingAnimationByDirection(kLeft), temp);  
  87.     sprintf(temp, "%d", aUp);  
  88.     //加載勇士向上走的動畫  
  89.     CCAnimationCache::sharedAnimationCache()->addAnimation(createHeroMovingAnimationByDirection(kUp), temp);  
  90.     //加載戰斗動畫  
  91.     sprintf(temp, "%d", aFight);  
  92.     CCAnimationCache::sharedAnimationCache()->addAnimation(createFightAnimation(), temp);  
  93.     //加載NPC動畫  
  94.     CCAnimationCache::sharedAnimationCache()->addAnimation(createNPCAnimation(), "npc0");  
  95.     return true;  
  96. }  
  97.  
  98. CCAnimation* AnimationManager::createHeroMovingAnimationByDirection(HeroDirection direction)  
  99. {  
  100.     CCTexture2D *heroTexture = CCTextureCache::sharedTextureCache()->addImage("hero.png");  
  101.     CCSpriteFrame *frame0, *frame1, *frame2, *frame3;  
  102.     //第二個參數表示顯示區域的x, y, width, height,根據direction來確定顯示的y坐標  
  103.     frame0 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*0, 32*direction, 32, 32));  
  104.     frame1 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*1, 32*direction, 32, 32));  
  105.     frame2 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*2, 32*direction, 32, 32));  
  106.     frame3 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*3, 32*direction, 32, 32));  
  107.     CCMutableArray<CCSpriteFrame*>* animFrames = new CCMutableArray<CCSpriteFrame*>(4);  
  108.     animFrames->addObject(frame0);  
  109.     animFrames->addObject(frame1);  
  110.     animFrames->addObject(frame2);  
  111.     animFrames->addObject(frame3);  
  112.     CCAnimation* animation = new CCAnimation();  
  113.     //0.05f表示每幀動畫間的間隔  
  114.     animation->initWithFrames(animFrames, 0.05f);  
  115.     animFrames->release();  
  116.  
  117.     return animation;  
  118. }  
  119.  
  120. //創建戰斗動畫模板  
  121. CCAnimation* AnimationManager::createFightAnimation()  
  122. {  
  123.     //定義每幀的序號  
  124.     int fightAnim[] =   
  125.     {  
  126.         4,6,8,10,13,15,17,19,20,22  
  127.     };  
  128.     CCMutableArray<CCSpriteFrame*>* animFrames = new CCMutableArray<CCSpriteFrame*>();  
  129.     CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("sword.png");  
  130.     CCSpriteFrame *frame;  
  131.     int x, y;  
  132.     for (int i = 0; i < 10; i++)   
  133.     {  
  134.         //計算每幀在整個紋理中的偏移量  
  135.         x = fightAnim[i] % 5 - 1;  
  136.         y = fightAnim[i] / 5;  
  137.         frame = CCSpriteFrame::frameWithTexture(texture, cocos2d::CCRectMake(192*x, 192*y, 192, 192));  
  138.         //第17和19幀在y方向上有-8的偏移  
  139.         if (fightAnim[i] == 17 || fightAnim[i] == 19)  
  140.         {  
  141.             frame->setOffsetInPixels( ccp(0, -8) );  
  142.         }  
  143.         animFrames->addObject(frame);  
  144.     }  
  145.     CCAnimation* animation = new CCAnimation();  
  146.     animation->initWithFrames(animFrames, 0.1f);  
  147.     animFrames->release();  
  148.     return animation;  
  149. }  
  150.  
  151. CCAnimation* AnimationManager::createNPCAnimation()  
  152. {  
  153.     CCTexture2D *heroTexture = CCTextureCache::sharedTextureCache()->addImage("npc.png");  
  154.     CCSpriteFrame *frame0, *frame1, *frame2, *frame3;  
  155.     //第二個參數表示顯示區域的x, y, width, height,根據direction來確定顯示的y坐標  
  156.     frame0 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*0, 0, 32, 32));  
  157.     frame1 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*1, 0, 32, 32));  
  158.     frame2 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*2, 0, 32, 32));  
  159.     frame3 = CCSpriteFrame::frameWithTexture(heroTexture, cocos2d::CCRectMake(32*3, 0, 32, 32));  
  160.     CCMutableArray<CCSpriteFrame*>* animFrames = new CCMutableArray<CCSpriteFrame*>(4);  
  161.     animFrames->addObject(frame0);  
  162.     animFrames->addObject(frame1);  
  163.     animFrames->addObject(frame2);  
  164.     animFrames->addObject(frame3);  
  165.     CCAnimation* animation = new CCAnimation();  
  166.     //0.05f表示每幀動畫間的間隔  
  167.     animation->initWithFrames(animFrames, 0.2f);  
  168.     animFrames->release();  
  169.  
  170.     return animation;  
  171. }  
  172.  
  173. //獲取指定動畫模版  
  174. CCAnimation* AnimationManager::getAnimation(int key)  
  175. {  
  176.     char temp[20];  
  177.     sprintf(temp, "%d", key);  
  178.     return CCAnimationCache::sharedAnimationCache()->animationByName(temp);  
  179. }  
  180.  
  181. //獲取一個指定動畫模版的實例  
  182. CCAnimate* AnimationManager::createAnimate(int key)  
  183. {  
  184.     //獲取指定動畫模版  
  185.     CCAnimation* anim = getAnimation(key);  
  186.     if(anim)  
  187.     {  
  188.         //根據動畫模版生成一個動畫實例  
  189.         return cocos2d::CCAnimate::actionWithAnimation(anim);  
  190.     }  
  191.     return NULL;  
  192. }  
  193.  
  194. //獲取一個指定動畫模版的實例  
  195. CCAnimate* AnimationManager::createAnimate(const char* key)  
  196. {  
  197.     //獲取指定動畫模版  
  198.     CCAnimation* anim = CCAnimationCache::sharedAnimationCache()->animationByName(key);  
  199.     if(anim)  
  200.     {  
  201.         //根據動畫模版生成一個動畫實例  
  202.         return cocos2d::CCAnimate::actionWithAnimation(anim);  
  203.     }  
  204.     return NULL;  
  205. }  
  206. //***********************調用animationManager的方法  
  207. //從動畫管理器中根據npcId獲取動畫,開始永久播放  
  208.     CCAnimate* animation = sAnimationMgr->createAnimate(npcId->m_sString.c_str());  
  209.     if (animation != NULL) {  
  210.         CCActionInterval* action = CCRepeatForever::actionWithAction(animation);  
  211.         npcSprite->runAction(action);  
  212.     }  
  213.     ////////////////////////////////////////////////////////////////  
  214. //**************************動畫管理器的使用**************************************  
  215. ////////////////////////////////////////////////////////////////////////////////      
  216. //*************** 第一步:appdelegate,中的初始化的方法*************  
  217. bool AppDelegate::applicationDidFinishLaunching()  
  218. {  
  219.     CCDirector *pDirector = CCDirector::sharedDirector();  
  220.     pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());  
  221.     pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);  
  222.     pDirector->setDisplayFPS(true);  
  223.     pDirector->setAnimationInterval(1.0 / 60);  
  224.     //初始化動畫管理器  
  225.     sAnimationMgr->initAnimationMap();  
  226.     //創建游戲主界面  
  227.     CCScene *pScene = GameScene::playNewGame();  
  228.     //讓director運行場景  
  229.     pDirector->runWithScene(pScene);  
  230.     return true;  
  231. }  
  232. //*******************最后一步:釋放動畫管理器**********************  
  233. AppDelegate::~AppDelegate()  
  234. {  
  235.     SimpleAudioEngine::end();  
  236.     //釋放動畫管理器  
  237.     sAnimationMgr->release();  
  238. }  
  239.  
  240. //******************************第二步:使用方法***********************************  
  241.  
  242. //**************初始化一個精靈1********************  
  243. //用模板初始化一個精靈  
  244. bool Hero::heroInit()  
  245. {  
  246.       
  247.     heroSprite = CCSprite::spriteWithSpriteFrame(sAnimationMgr->getAnimation(kDown)->getFrames()->getObjectAtIndex(0));  
  248. }  
  249. //********************使用方法2******************************  
  250. //例子1  
  251.     heroSprite->runAction(sAnimationMgr->createAnimate(direction));  
  252. //例子2  
  253. CCAction* action = CCSequence::actions(  
  254.         sAnimationMgr->createAnimate(aFight),  
  255.         CCCallFuncN::actionWithTarget(this, callfuncN_selector(Hero::onFightDone)),  
  256.         NULL);  
  257. //例子3  
  258. //從動畫管理器中根據npcId獲取動畫,開始永久播放  
  259.     CCAnimate* animation = sAnimationMgr->createAnimate(npcId->m_sString.c_str());  
  260.     if (animation != NULL) {  
  261.         CCActionInterval* action = CCRepeatForever::actionWithAction(animation);  
  262.         npcSprite->runAction(action);  
  263.     }  
  264.  
  265.  
  266.  

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

信宜市| 桃江县| 庆元县| 松滋市| 布尔津县| 南汇区| 巴彦县| 东港市| 洛浦县| 哈密市| 东方市| 陆河县| 偃师市| 阿克陶县| 清丰县| 石阡县| 漳平市| 白河县| 北安市| 岚皋县| 隆化县| 林口县| 龙海市| 黔江区| 左贡县| 邯郸县| 凌海市| 股票| 辛集市| 海安县| 淮北市| 明光市| 海淀区| 科技| 孝昌县| 永定县| 吴桥县| 湄潭县| 定陶县| 华阴市| 内乡县|