上一篇我们说到了抽奖项目在界面上的一些设置,今天我们继续。先说下这个抽奖的原理,简单点来说就是让转盘旋转一定的角度,让指针指向奖项就可以了,我们在转盘转动前就确定好奖项,当然,你可以通过随机数来确定好奖项,例如有8个奖项,就先分成8份,然后随机到其中的一个奖项就可以了,之前,我们已经确定好了每一个奖项需要旋转的角度。如果我们确定好了奖项,是不是就知道了要旋转多少度的角度了,我们在这个角度上再加上几个360度,然后通过动画效果让转盘动起来和停止下来,这样一个转盘抽奖就可以做起来了。废话少说,下面直接开始
1. 打开脚本lottery.ts,定义 luckyWheel=null
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.点击运行项目
8.点击“开始抽奖”按钮
9.没问题,这样一个小小的抽奖功能就做完了。当然还有很多地方需要完善下,例如调整下旋转的角度和速度。这些你们可以自己慢慢调试。
今天就到这里了,可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家