cocos2d-x 3.3 之卡牌设计 NO.2 卡牌翻转

前端之家收集整理的这篇文章主要介绍了cocos2d-x 3.3 之卡牌设计 NO.2 卡牌翻转前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇文章讲了如何选取卡牌,这次说说怎么实现卡牌翻转的效果

假设我们已经点击了一张卡牌,并用指针Open_sel指向了这张卡牌,那么现在我们需要将这张卡牌翻转过来变成正面,效果如下(图片素材均来自网络,自己经过了处理):


这个翻转效果借鉴了网上大神的代码,首先看看类的内容

  1. class OpenCard : public Sprite
  2. {
  3. public:
  4. OpenCard();
  5. ~OpenCard();
  6. static OpenCard* create(int loc_num,int num);
  7. virtual bool init(int loc_num,int num);
  8. void card_init_pic(int num);//加载资源
  9. void card_init_action();//加载动画
  10. void card_set_openCard();//打开卡牌
  11. void card_set_closeCard();//关闭卡牌
  12. //数据
  13. ActionInterval* m_openAnimIn;//打开牌的背面
  14. ActionInterval* m_openAnimOut;//打开牌的正面
  15. ActionInterval* m_closeAnimIn;//关闭牌的背面
  16. ActionInterval* m_closeAnimOut;//关闭牌的正面
  17. };
这是类中卡牌翻转需要的内容,ActionInterval是cocos2dx中的一种延时性动作,与 ActionInstant(瞬时动作)相对

一、创建

首先我们需要创建卡牌精灵,有两个传入参数,一个是位置编号,一个是卡牌编号,这里不做讨论。

创建的时候调用card_init_pic和card_init_action两个加载函数,我们来看看两个加载函数

  1. </pre></p><p><span style="font-family: Consolas,serif; line-height: 18px;"></span><pre name="code" class="cpp"><pre name="code" class="cpp">void OpenCard::card_init_pic(int num)
  2. {
  3. Point point;
  4. point=card_set_locate();
  5. //创建正面卡牌
  6. Sprite* inCard = Sprite::create("card_face.png");
  7. inCard->setPosition(point);
  8. inCard->setVisible(false);//刚创建的时候正面卡牌不可见,只显示背面卡牌
  9. inCard->setTag(card_num_second);
  10. addChild(inCard);
  11.  
  12. //创建背面卡牌
  13. Sprite* outCard = Sprite::create("card_back.png");
  14. outCard->setPosition(point);
  15. outCard->setTag(card_num);
  16. addChild(outCard);
  17. }
  1.  
  1. void OpenCard::card_init_action()
  2. {
  3. //打开牌
  4. m_openAnimIn = (ActionInterval*)Sequence::create(DelayTime::create(kRoundTime),//kRoudTime是翻转时间,正面卡牌得等背面卡牌翻转90度之后才能显示
  5. Show::create(),//显示
  6. OrbitCamera::create(kRoundTime,1,kInAngleZ,kInDeltaZ,0),//翻转
  7. NULL);
  8. m_openAnimIn->retain();//引用计数加一,必须加这句话,不然当你需要调用动画的时候它早就被系统释放了
  9.  
  10. m_openAnimOut = (ActionInterval *)Sequence::create(OrbitCamera::create(kRoundTime,kOutAngleZ,kOutDeltaZ,//翻转
  11. Hide::create(),DelayTime::create(kRoundTime),NULL);
  12.  
  13. m_openAnimOut->retain();
  14. //关闭
  15. m_closeAnimIn = (ActionInterval*)Sequence::create(DelayTime::create(kRoundTime),Show::create(),OrbitCamera::create(kRoundTime,NULL);
  16. m_closeAnimIn->retain();
  17. m_closeAnimOut = (ActionInterval *)Sequence::create(OrbitCamera::create(kRoundTime,Hide::create(),NULL);
  18.  
  19. m_closeAnimOut->retain();
  20. }
好了,以上就是加载函数了,接下来我们就需要写一个播放动画的函数:

  1. void OpenCard::card_set_openCard()
  2. {
  3. Sprite* inCard = (Sprite*)getChildByTag(card_num_second);
  4. Sprite* outCard = (Sprite*)getChildByTag(card_num);
  5. inCard->runAction(m_openAnimIn);
  6. outCard->runAction(m_openAnimOut);
  7. }
在成功选取卡牌后,只需Open_sel->card_set_openCard();一句就能翻转卡牌了

猜你在找的Cocos2d-x相关文章