• 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(){}  

    两张扑克牌资源:

                             

  • 相关阅读:
    【杭电】[2016]数据的交换输出
    【杭电】[2015]偶数求和
    【杭电】[2015]偶数求和
    【杭电】[2026]首字母变大写
    【杭电】[2026]首字母变大写
    【杭电】[2075]A|B?
    【杭电】[2075]A|B?
    【杭电】[2043]密码
    【杭电】[2043]密码
    SQL 06: 内连接 (多表查询)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5326409.html
Copyright © 2020-2023  润新知