• cocos 水果机,老Tiger虎机流水灯,博彩大转盘效果


    原(http://www.cnblogs.com/zisou/p/cocos2d-xZhuanpan.html)

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

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

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

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

    接下来,我想把这个转盘系统单独做在一个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

  • 相关阅读:
    linux tcp中time_wait
    linux查看系统信息
    运行程序出错无法找到库文件
    安装keepalived
    python 深拷贝与浅拷贝
    python import eventlet包时提示ImportError: cannot import name eventlet
    [原创] 用两个queue实现stack的功能
    [原创] 用两个stack实现queue的功能
    [原创] 编写函数,实现对链表元素的排序与分类
    python 装饰器
  • 原文地址:https://www.cnblogs.com/luorende/p/6255779.html
Copyright © 2020-2023  润新知