****************************************************************************
时间:2015-02-01
作者:Sharing_Li
转载出处:http://www.jb51.cc/article/p-fmhyjmnl-rx.html
****************************************************************************
在不同游戏中,经常有各种各样抽奖的环节,比如每次登入游戏的免费抽奖,卡牌游戏中的抽不同颜色的卡牌英雄,不同品质的武器抽奖,十连抽等等。今天给大家讲解一下,比较传统的抽奖方式,就是转转盘的抽奖,包含抽奖界面动画的设计和抽奖概率的设计。由于内容稍微有点多,所以分两篇进行讲解,本篇先介绍转盘抽奖方式的界面设计。废话不多说,先上效果图:
(。。。亮瞎了我的钛合金眼!)
来看看大致的功能需求有哪些:
1、一个转盘,一个指针,可以是转盘转,也可以是指针转,本篇是转盘转。
2、转盘在转的时候,速度是先快后慢,然后停止。
3、转盘在转的时候,各种粒子效果的动画,其中包括圆环状的闪光星星,还有以椭圆轨迹运动的小彗星。
4、抽中奖品后,弹出抽中奖品的动画。
先看简单的初始化代码:
- boolLotteryTurnTest::init()
- {
- if(!Layer::init())
- returnfalse;
- }
- autobgSize=Director::getInstance()->getWinSize();
- m_pBg=Sprite::create("LotteryTurn/bg_big.png");
- m_pBg->setPosition(Vec2(bgSize.width/2,bgSize.height/2));
- this->addChild(m_pBg);
- //添加标题
- autoplabel=Label::createWithTTF("LotteryTurnTest","fonts/MarkerFelt.ttf",30);
- plabel->setPosition(Vec2(bgSize.width/2,bgSize.height*0.9));
- m_pBg->addChild(plabel);
- //添加转盘
- m_turnBg=Sprite::create("LotteryTurn/turn_bg.png");
- m_turnBg->setPosition(Vec2(bgSize.width/2,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> m_pBg->addChild(m_turnBg);
- //添加指针
- autoarrNor=Sprite::create("LotteryTurn/turn_arrow.png");
- autoarrSel=Sprite::create("LotteryTurn/turn_arrow.png");
- arrSel->setColor(Color3B(190,190,190));
- m_turnArr=MenuItemSprite::create(arrNor,arrSel,CC_CALLBACK_1(LotteryTurnTest::onBtnCallback,this));
- m_turnArr->setPosition(Vec2(bgSize.width/2,bgSize.height*0.557));
- m_turnArr->setScale(0.7);
- autopMenu=Menu::createWithItem(m_turnArr);
- pMenu->setPosition(Vec2::ZERO);
- m_pBg->addChild(pMenu);
- //添加中奖之后的简单界面
- autoawardLayer=LayerColor::create(Color4B(0,100));
- awardLayer->setPosition(Point::ZERO);
- awardLayer->setTag(100);
- m_pBg->addChild(awardLayer,10);
- awardLayer->setVisible(false);
- true;
- }
点击按钮,获取一个随机的旋转角度,转盘开始转,注意的是,转盘在转的时候,按钮要被设置成无效状态,以免多次点击。