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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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(){}  

两张扑克牌资源:

                         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos2d-x中实现流光效果可以使用shader来进行渲染。首先,我们需要创建一个自定义的shader,并将其应用于需要实现流光效果的节点上。 在使用Cocos2d-x的过程中,我们可以使用GLSL语言编写shader代码。在实现流光效果的shader中,我们可以通过改变像素的颜色和透明度来创建流动的效果。 首先,我们定义一个uniform变量time,用于控制流光的移动速度。然后,在片段着色器中,通过改变颜色和透明度的计算公式来实现流动的效果。我们可以使用sin函数或者其他数学函数来计算出每个像素点的颜色和透明度,然后将其应用到节点上。 在节点的渲染流程中,我们将这个自定义的shader应用到节点上,然后传入时间参数,即更新uniform变量time的值。随着时间的增加,我们就可以看到节点上的流光效果在不断地移动。 为了实现更加逼真的流光效果,我们可以尝试给流光添加一些额外的效果,比如模糊、叠加等。通过调整shader代码中的计算公式和传入的参数,我们可以根据自己的需求来调整流光效果的强度和样式。 总结起来,在Cocos2d-x中实现流光效果需要创建一个自定义的shader,并将其应用于需要实现效果的节点上。通过改变颜色和透明度的计算公式、传入时间参数等,我们可以实现一个流光效果,使节点看起来具有流动的动画效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值