从0开始用CocosCreator开发一个转盘抽奖功能(二)

400 阅读2分钟

上一篇我们说到了抽奖项目在界面上的一些设置,今天我们继续。先说下这个抽奖的原理,简单点来说就是让转盘旋转一定的角度,让指针指向奖项就可以了,我们在转盘转动前就确定好奖项,当然,你可以通过随机数来确定好奖项,例如有8个奖项,就先分成8份,然后随机到其中的一个奖项就可以了,之前,我们已经确定好了每一个奖项需要旋转的角度。如果我们确定好了奖项,是不是就知道了要旋转多少度的角度了,我们在这个角度上再加上几个360度,然后通过动画效果让转盘动起来和停止下来,这样一个转盘抽奖就可以做起来了。废话少说,下面直接开始

1. 打开脚本lottery.ts,定义  luckyWheel=null

image.png

2.在start函数里获取luckyWheel

    start() {

        this.luckyWheel=this.Wheel.getComponent('luckyWheel')

    }

  3.新建showresult函数

    showresult(num){

        this.luckyWheel.rotateToRes(num)

}

  4. 在之前的按钮绑定的函数onlineLottery里产生随机数

    //在线抽奖

    onlineLottery(){

       let num= Math.floor(Math.random() * 8)+1;

        this.showresult(num);

    }

 

5. 接下来,我们在处理下转盘的转动效果,打开脚本luckyWheel.ts,在start函数里记录下当前转盘的角度。

    start() {

        this.disAngle=this.node.angle

        console.log('start')

    }

6. 添加转盘转动效果函数rotateToRes

    rotateToRes(res){

        if(res <0 || res >this.prizeAngles.length){

            console.log('开奖有误')

            return;

        }

        let time=Math.random()*2 +0.5;

        let circleAngle=360 * Math.floor(Math.random()*4+3);

        let rotateAngle=this.prizeAngles[res-1];

          rotateAngle-=this.disAngle;  //减去上一次的旋转角度

        rotateAngle+=Math.random()*20 -10;

        while(rotateAngle<0){

            rotateAngle+=360

        }

          tween(this.node)

        .by(time/4*3,{angle:circleAngle})

        .by(time/4,{angle: rotateAngle},{easing:'smooth'})

        .call(

            ()=>{

                //记录本次开奖后转盘所处的角度,便于下一次计算开始角度

                this.disAngle=this.node.angle

                console.log('恭喜你抽到'+res)

            }

        )

        .start();

    }

 

7.点击运行项目

image.png

8.点击“开始抽奖”按钮

image.png

9.没问题,这样一个小小的抽奖功能就做完了。当然还有很多地方需要完善下,例如调整下旋转的角度和速度。这些你们可以自己慢慢调试。

image.png

今天就到这里了,可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家