下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Cocos2D-X转盘游戏制作教程:博彩大转盘

作者:课课家教育     来源: http://www.kokojia.com点击数:1436发布时间: 2016-04-30 09:00:14

标签: Cocos2D转盘Cocos2D-X技巧Cocos2D-X教程

  现如今,我们的手机游戏随着时代发展越来越多样化,但是却有一些经典的转盘游戏或者是转盘抽奖模块一直保留了下来,这些游戏或者模块在游戏开发中是怎么制作的呢?让我们一起阅读一下本篇教程吧~

  博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模块,会增进玩家的粘性,每天都想来抽两把试试手气;

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

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

博彩大转盘游戏物品背景框

博彩大转盘游戏物品被选中的背景框

博彩大转盘游戏500块奖品

博彩大转盘游戏1000块奖品

博彩大转盘游戏开始键

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

  说一下大概的制作思路,首先是需要格子,来组成一个矩形矩阵,长和宽根据自己需求自己去设置,中间有一个按钮,点了之后,格子就会变背景,并且循环跑动在矩形格子上,最终根据加速度从快到慢,减速下来停在哪个格子上,便获取到该格子上的奖励;

  ok,我们转盘游戏的前期准备工作和制作思路都已经做好了,接下来我们开始进入游戏开发的正题,直接上代码;

  格子:

  //创建一个矩阵格子阵

  boxgezi = CCArray::create();

  int bid = 0;

  for (int i = 0; i < 4; i++)

  {

  for (int j = 0; j <=5; j++)

  {

  Zp_BoxData* thisbox = new Zp_BoxData();

  thisbox->set_boxid(bid);

  thisbox->set_boxReward(getReward(bid%6));

  if(bid==4)

  {

  thisbox->set_xuanzhong(true);

  }

  else

  {

  thisbox->set_xuanzhong(false);

  }

  thisbox->set_tag(bid);

  switch (i)

  {

  case 0:

  thisbox->set_point(ccp(55+gezi_w*j,allbd_h-30));

  boxgezi->addObject(thisbox);

  break;

  case 1:

  if(j<=2)

  {

  thisbox->set_point(ccp(55+gezi_w*5,allbd_h-30-gezi_h-gezi_h*j));

  boxgezi->addObject(thisbox);

  }

  break;

  case 2:

  thisbox->set_point(ccp(55+gezi_w*5-gezi_w*j,30));

  boxgezi->addObject(thisbox);

  break;

  case 3:

  if(j<=2)

  {

  thisbox->set_point(ccp(55,30+gezi_h+gezi_h*j));

  boxgezi->addObject(thisbox);

  }

  break;

  default:

  break;

  }

  bid++;

  }

  }

  vector maua ;

  for (int i = 0; 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 gezi_l = GlobalInfo::getInstance()->get_gizilist();

  //做事儿

  if(gezi_l.size()>0)

  {

  if(fnum>gezi_l.size()-1)

  {

  fnum = 0;

  }

  int bid = gezi_l.at(fnum);

  changeBox(bid,true);

  //再把上一个变回来

  int lastnum = fnum-1;

  if(lastnum<0)

  {

  lastnum=gezi_l.size()-1;

  }

  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<25)

  {

  float nexttime = time+runnum*0.01f;

  if(nexttime>=1.5f)

  {

  nexttime=1.5f;

  }

  this->schedule(schedule_selector(TurntableSystem::runAct),nexttime);

  }

  }

  这边我是启动了一个定时器去实现这个递归加速的方法,里面的25目前是固定的跑25格必定停下!!!

  以下就牵扯到随机数概率获取奖品的问题了,那么根据咱们策划给的方案,每个格子的概率对应的格子数,和步数

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

  下面我贴一下跑起来的效果图

博彩大转盘游戏运行效果图

  开始后循环跑动;

博彩大转盘游戏运行效果

  小结:

  好啦,本篇教程到这里就结束啦,如果你还有什么疑问,或者不明白的地方,可以到本网站的视频站观看相关视频~

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程