zoukankan      html  css  js  c++  java
  • 借助CCAction实现转盘抽奖

         借助cocos2dx自带的CCMoveBY和CCEaseInOut实现目前流行的转盘抽奖效果。

         创建一个辅助结点node_projection_,将转盘中被选中的精灵的序号pos与node_projection_的X坐标建立映射关系。当node_projection_执行CCMoveBY时,通过在每帧执行的回调函数roll_update(float dt)去刷新转盘中精灵的状态。而node_projuction_在X轴上的移动的距离决定了转盘最终高亮的位置。

     1 void LayerRoll::roll(CCObject* pSender, CCControlEvent event)
     2 {
     3     
     4     node_projection_->setPosition(ccp(0, 0));
     5     spr_num_ = 5;
     6     roll_index_ =1+ rand() % 5;
     7     
     8     int rount_t = 4; //round_time 周期数
     9     roll_unit_l_ = 32;  //node_projection移动单元的长度
    10     int length = roll_unit_l_*spr_num_*rount_t + roll_unit_l_*roll_index_;
    11   12     CCCallFunc* mend = CCCallFunc::create(this, callfunc_selector(LayerRoll::roll_end));
    13     CCMoveBy* mov = CCMoveBy::create(4.0f, ccp(length, 0));
    14     
    15     CCSequence* seq = CCSequence::create(CCEaseInOut::create(mov,1.5f), mend, NULL); //CCEaseInOut 慢快慢效果
    16     node_projection_->runAction(seq);
    17     schedule(schedule_selector(LayerRoll::roll_update));
    18     
    19 }
    20 
    21 void LayerRoll::roll_end()
    22 {
    23     
    24     unschedule(schedule_selector(LayerRoll::roll_update));
    25 }
    26 
    27 void LayerRoll::roll_update(float dt)
    28 {
    29     int pos = node_projection_->getPositionX();
    30     pos = pos % (roll_unit_l_*spr_num_); 
    31     pos = pos / roll_unit_l_+1;
    32     if (pos == 1)
    33     {
    34         spr_1_->setScale(0.8f);
    35     }
    36     else
    37     {
    38         spr_1_->setScale(0.6f);
    39     }
    40     if (pos==2)
    41     {
    42         spr_2_->setScale(0.8f);
    43 
    44     }
    45     else
    46     {
    47         spr_2_->setScale(0.6f);
    48 
    49     }
    50     if (pos==3)
    51     {
    52         spr_3_->setScale(0.8f);
    53 
    54     }
    55     else
    56     {
    57         spr_3_->setScale(0.6f);
    58 
    59     }
    60     if (pos == 4)
    61     {
    62         spr_4_->setScale(0.8f);
    63 
    64     }
    65     else
    66     {
    67         spr_4_->setScale(0.6f);
    68 
    69     }
    70     if (pos == 5)
    71     {
    72         spr_5_->setScale(0.8f);
    73 
    74     }
    75     else
    76     {
    77         spr_5_->setScale(0.6f);
    78 
    79     }
    80 }

    这里转盘的格数为5

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/codingdiary/p/4151835.html
Copyright © 2011-2022 走看看