cocos2dx 利用CCOrbitCamera实现扑克牌翻牌效果

  1. #include "HelloWorldScene.h"  
  2. #include "SimpleAudioEngine.h"  
  3.   
  4. using namespace cocos2d;  
  5. using namespace CocosDenshion;  
  6.   
  7. CCScene* HelloWorld::scene()  
  8. {  
  9.     CCScene *scene = CCScene::create();  
  10.     HelloWorld *layer = HelloWorld::create();  
  11.     scene->addChild(layer);  
  12.     return scene;  
  13. }  
  14. bool HelloWorld::init()  
  15. {  
  16.     if ( !CCLayer::init() )  
  17.     {  
  18.         return false;  
  19.     }  
  20.     size = CCDirector::sharedDirector()->getWinSize();  
  21.       
  22.     //加一背景  
  23.     CCLayerColor* background = CCLayerColor::create(ccc4(255, 180, 255, 255), size.width, size.height);  
  24.     this->addChild(background);  
  25.       
  26.     actionIsDone = true;//标示动作是否完毕  
  27.       
  28.     createPoker(); //创建扑克  
  29.       
  30.     return true;  
  31. }  
  32.   
  33. //创建扑克  
  34. void HelloWorld::createPoker()  
  35. {  
  36.     //扑克牌正面  
  37.     CCSprite* pokerFront = CCSprite::create("poker_front.png");  
  38.     pokerFront->setVisible(false);  
  39.     pokerFront->setPosition(ccp(size.width/2, size.height/2));  
  40.     this->addChild(pokerFront,1,123);  
  41.     
  42.     //扑克牌反面  
  43.     CCSprite* pokerBack = CCSprite::create("poker_back.png");  
  44.     pokerBack->setPosition(pokerFront->getPosition());  
  45.     this->addChild(pokerBack,1,321);  
  46. }  
  47. //翻牌动作  
  48. void HelloWorld::startOrbitAction()  
  49. {  
  50.     //扑克牌正面  
  51.     CCSprite* pokerFront = (CCSprite*)this->getChildByTag(123);  
  52.     //扑克牌反面  
  53.     CCSprite* pokerBack = (CCSprite*)this->getChildByTag(321);  
  54.       
  55.     float orbitTime = 1;  
  56.     if (pokerFront->isVisible() == false && actionIsDone == true) {  
  57.         actionIsDone = false;  
  58.         //第一个參数是旋转的时间,第二个參数是起始半径,第三个參数半径差。第四个參数是起始Z角。
  59. 第五个參数是旋转Z角差。第六个參数是起始X角。最后一个參数旋转X角差,  
  60.         //顺时钟翻转
            CCOrbitCamera* orbitFront = CCOrbitCamera::create(orbitTime, 1, 0, 270, 90, 0, 0);   
  61.         CCSequence* sequenceFront = CCSequence::createWithTwoActions(CCShow::create(), orbitFront);  
  62.         CCTargetedAction* targetFront = CCTargetedAction::create(pokerFront, sequenceFront);  
  63.   
  64.         CCOrbitCamera* orbitBack = CCOrbitCamera::create(orbitTime, 1, 0, 0, 90, 0, 0);  
  65.         pokerBack->runAction(CCSequence::create(orbitBack, CCHide::create(), targetFront, CCCallFunc::create(this, callfunc_selector(HelloWorld::actionIsDownFunc)),NULL));  
  66.     }else if(pokerFront->isVisible() == true && actionIsDone == true){  
  67.         actionIsDone = false;  
  68.         //逆时钟翻转
            CCOrbitCamera* orbitFront = CCOrbitCamera::create(orbitTime, 1, 0, 270, 90, 180, 0); 
  69.         CCSequence* sequenceFront = CCSequence::createWithTwoActions(CCShow::create(), orbitFront);  
  70.         CCTargetedAction* targetFront = CCTargetedAction::create(pokerBack, sequenceFront);  
  71.           
  72.         CCOrbitCamera* orbitBack = CCOrbitCamera::create(orbitTime, 1, 0, 0, 90, 0, 0);  
  73.         pokerFront->runAction(CCSequence::create(orbitBack, CCHide::create(), targetFront, CCCallFunc::create(this, callfunc_selector(HelloWorld::actionIsDownFunc)),NULL));  
  74.     }  
  75. }  
  76.   
  77. void HelloWorld::actionIsDownFunc()  
  78. {  
  79.     actionIsDone = true;  
  80. }  
  81.   
  82. bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)  
  83. {  
  84.     //翻牌动作  
  85.     startOrbitAction();  
  86.     return true;  
  87. }  
  88.   
  89. void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){}  
  90. void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){}  
  91. void HelloWorld::onEnter()  
  92. {  
  93.     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);  
  94.     CCLayer::onEnter();  
  95. }  
  96. void HelloWorld::onExit()  
  97. {  
  98.     CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);  
  99.     CCLayer::onExit();  
  100. }  
  101. HelloWorld::~HelloWorld(){}  

两张扑克牌资源:

                         

posted @ 2016-03-27 18:29  phlsheji  阅读(592)  评论(0编辑  收藏  举报