欢迎来到淼淼之森的博客小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

CocosCreator之水果机抽奖

  |   0 评论   |   0 浏览

推荐阅读:

一。前言

在前面给大家分享了大转盘的抽奖方式,这是现在游戏使用较多的一种抽奖方式,今天给大家介绍另一抽奖方式——水果机,这是以前街机游戏使用较多的抽奖方式。该方式使用选中奖品的方式来进行抽奖。

二。算法讲解

先声明几个变量来控制选项依次选中的转动效果,可在properties里面声明,以方便调试时修改数值:

//最大速度
        maxSpeed: {      
            default: 20,
            type: cc.Float,
            max: 30,
            min: 1,
        },
        //减速时间==加速时间
        duration: {      
            default: 2,
            type: cc.Float,
            max: 10,
            min: 1,
        },
        //加速度
        acc: {           
            default: 8,
            type: cc.Float,
            max: 10,
            min: 1,
        },
        gearNum: {
            default: 10,
            type: cc.Integer,
            max: 10,
            min: 1,
        },

不需要经常修改的变量,声明在onLoad中:

this.wheelState = 0;      //转盘状态  1--加速  2--减速   0--静止
this.curSpeed = 0;        //当前速度
this.spinTime = 0;        //减速前旋转时间
this.firstAngle = 30;    //每个奖品的中间角度
this.gearAngle = 60; //每个奖品的角度
this.finalAngle = 0; //最终结果指定的角度
this.decAngle = 3 * 360;//减速旋转三周

抽奖转动状态设置为3个阶段,0(未转动),1(加速阶段),2(减速状态)。在加速状态时,通过判断转动速度是否达到最大速度来判断下一阶段是继续加速还是开始减速。在减速阶段,通过判断减速阶段需要转动的角度是否等于减速阶段已经转过的角度,从而判断转动是否结束。

三。功能实现

1.加速阶段

if (self.wheelState == 1) 
{
            self.spinTime += dt;//加速阶段的时间累计
            self.uiRoot.startAward.rotation += self.curSpeed;//每帧后旋转的角度
            this.showIndexLight(self.uiRoot.startAward.rotation);//显示指针到达区域的奖品的外发光

            if (self.curSpeed <= self.maxSpeed) {
                self.curSpeed += self.acc;//修改下一帧速度
            } else {
                if (self.spinTime < self.duration) {//判断时间是否到
                    return;
                }
                //设置目标值
                self.finalAngle = self.targetID * self.gearAngle + self.firstAngle;//指针最后停留的位置
                self.maxSpeed = self.curSpeed;//当前速度未转动过程中的最大速度
                self.wheelState = 2;
            }
        }

2.减速阶段

 else if (self.wheelState == 2) 
 {
            var curRo = self.uiRoot.startAward.rotation;
            var hadRo = curRo - self.finalAngle;//减速阶段已经转过的角度
            self.curSpeed = self.maxSpeed * ((self.decAngle - hadRo) / self.decAngle) + 0.2;//后面加一个数是使指针最后能停下来
            self.uiRoot.startAward.rotation +=  self.curSpeed;
            this.showIndexLight(self.uiRoot.startAward.rotation);

            if ((self.decAngle - hadRo) <= 0) {//判断是否转完
                self.wheelState = 0;
                self.uiRoot.startAward.rotation = self.finalAngle;
                this.showIndexLight(self.uiRoot.startAward.rotation);
                //大转盘结束后的一些列操作,根据实际情况需要增加删除
                self.ctrolWheelItem(true);
                self.uiRoot.close.active = true;
                self.uiRoot.startBtn.active = true;
                self.uiRoot.close.active = true;
                self.uiRoot.sign.interactable = true;
                self.uiRoot.wheel.interactable = true;
                for (let i = 0; i < self.uiRoot.wheelBg.childrenCount; i++) {
                    cc.find("item" + i, self.uiRoot.wheelBg).getComponent(cc.Button).interactable = true;
                }
                
                var data = cls.WheelLayer._srvData.SC_Wheel_Info;
                let info = gm.GameData.getBagDataById(data.award[this.targetID].id);
               
                self.showRewardBox(data.award[this.targetID].id, info.Icon, data.award[this.targetID].num);

                console.log("抽奖操作结束,需要同步奖励奖励数据,暂时不知道同步到哪里去");
            }

同步指针指到的奖品区域外发光

    //显示指针到达的区域发光
    showIndexLight(rot) {
        var index = parseInt(rot / 60) % 6;/60代表每个奖品格子的角度,6代表一共6个格式
        for (let i = 0; i < this.wheelLight.length; i++) {
            this.wheelLight[i].active = false;
        }
        this.wheelLight[index].active = true;
    },

标题:CocosCreator之水果机抽奖
作者:shirln
地址:https://www.mmzsblog.cn/articles/2019/08/09/1565361048793.html

如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜爱上游戏开发