博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模块,我会附上源码;

会增进玩家的粘性,每天都想来抽两把试试手气;

我做的这个是个矩形风格的转盘,不是那种圆形的转盘,但是原理是相差不多的;

首先准备一些素材,如:奖品,转盘格子背景,开始按钮等等....

【cocos2d-x 手游研发----博彩大转盘】-LMLPHP【cocos2d-x 手游研发----博彩大转盘】-LMLPHP

【cocos2d-x 手游研发----博彩大转盘】-LMLPHP【cocos2d-x 手游研发----博彩大转盘】-LMLPHP【cocos2d-x 手游研发----博彩大转盘】-LMLPHP

接下来,我想把这个转盘系统单独做在一个class文件夹中,以后可插拔的方便接入任何游戏,建了一个文件夹ZhuanPanSystem;

说一下大概的制作思路,首先是需要格子,来组成一个矩形矩阵,长和宽根据自己需求自己去设置,中间有一个按钮,点了之后,格子

就会变背景,并且循环跑动在矩形格子上,最终根据加速度从快到慢,减速下来停在哪个格子上,便获取到该格子上的奖励;

ok思路一定,看下代码如何实现;

格子:

//创建一个矩阵格子阵
boxgezi = CCArray::create();
int bid = ;
for (int i = ; i < ; i++)
{
for (int j = ; j <=; j++)
{ Zp_BoxData* thisbox = new Zp_BoxData();
thisbox->set_boxid(bid);
thisbox->set_boxReward(getReward(bid%));
if(bid==)
{
thisbox->set_xuanzhong(true);
}
else
{
thisbox->set_xuanzhong(false);
}
thisbox->set_tag(bid);
switch (i)
{
case :
thisbox->set_point(ccp(+gezi_w*j,allbd_h-));
boxgezi->addObject(thisbox);
break;
case :
if(j<=)
{
thisbox->set_point(ccp(+gezi_w*,allbd_h--gezi_h-gezi_h*j));
boxgezi->addObject(thisbox);
}
break;
case :
thisbox->set_point(ccp(+gezi_w*-gezi_w*j,));
boxgezi->addObject(thisbox);
break;
case :
if(j<=)
{
thisbox->set_point(ccp(,+gezi_h+gezi_h*j));
boxgezi->addObject(thisbox);
}
break;
default: break;
}
bid++;
}
}
vector<int> maua ; for (int i = ; i < boxgezi->count(); i++)
{
Zp_BoxData* bdata = (Zp_BoxData*)boxgezi->objectAtIndex(i);
Gzi* gz = new Gzi(allbd,bdata);
maua.push_back(bdata->get_boxid());
}

以上就是利用Gzi类创建出来的一个矩形范围的矩阵转盘,有了矩形转盘,还需要游戏中的点击开始以后,循环转动的效果;

用了一个递归去循环去跑一个加速度的效果的方法:

void TurntableSystem::runTurntableGet(float time)
{
this->schedule(schedule_selector(TurntableSystem::runAct), time);
} void TurntableSystem::runAct(float time)
{
vector<int> gezi_l = GlobalInfo::getInstance()->get_gizilist();
//做事儿
if(gezi_l.size()>)
{
if(fnum>gezi_l.size()-)
{
fnum = ;
}
int bid = gezi_l.at(fnum);
changeBox(bid,true);
//再把上一个变回来
int lastnum = fnum-;
if(lastnum<)
{
lastnum=gezi_l.size()-;
}
int lastid = gezi_l.at(lastnum);
changeBox(lastid,false);
fnum++;
}
runnum++;
this->unschedule(schedule_selector(TurntableSystem::runAct));
CCLOG("------%f----times=%d-",time,runnum);
if(runnum<)
{
float nexttime = time+runnum*0.01f;
if(nexttime>=1.5f)
{
nexttime=1.5f;
}
this->schedule(schedule_selector(TurntableSystem::runAct),nexttime);
}
}

这边我是启动了一个定时器去实现这个递归加速的方法,里面的25目前是固定的跑25格必定停下!!!
以下就牵扯到随机数概率获取奖品的问题了,那么根据咱们策划给的方案,每个格子的概率对应的格子数,和步数

去set这个值就可以了,剩下的工作就很简单了,只需增加随机概率就可以了;

下面我帖一下跑起来的效果图:

【cocos2d-x 手游研发----博彩大转盘】-LMLPHP

开始后循环跑动;

【cocos2d-x 手游研发----博彩大转盘】-LMLPHP

源码及素材下载资源地址:

百度云盘:http://pan.baidu.com/share/link?shareid=3443771417&uk=4097703620&third=15

05-11 13:18