博彩大轉盤,轉盤抽獎的小系統,這是一個很有意思的游戲模塊,游戲中增加這樣一些趣味的小模塊,我會附上源碼;
會增進玩家的粘性,每天都想來抽兩把試試手氣;
我做的這個是個矩形風格的轉盤,不是那種圓形的轉盤,但是原理是相差不多的;
首先准備一些素材,如:獎品,轉盤格子背景,開始按鈕等等....
接下來,我想把這個轉盤系統單獨做在一個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<int> 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<int> 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這個值就可以了,剩下的工作就很簡單了,只需增加隨機概率就可以了;
下面我帖一下跑起來的效果圖:
開始后循環跑動;
源碼及素材下載資源地址:
百度雲盤:http://pan.baidu.com/share/link?shareid=3443771417&uk=4097703620&third=15