【cocos2d-x 手游研發----博彩大轉盤】


博彩大轉盤,轉盤抽獎的小系統,這是一個很有意思的游戲模塊,游戲中增加這樣一些趣味的小模塊,我會附上源碼;

會增進玩家的粘性,每天都想來抽兩把試試手氣;

我做的這個是個矩形風格的轉盤,不是那種圓形的轉盤,但是原理是相差不多的;

首先准備一些素材,如:獎品,轉盤格子背景,開始按鈕等等....

 

接下來,我想把這個轉盤系統單獨做在一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM