【游戏客户端】实现转盘抽奖活动

                               【游戏客户端】实现转盘活动

    今天和大家分享一下,如何实现类似抽王者水晶以及csdn抽奖的转盘活动

    王者水晶抽奖示例:

 

 

    我们可以看到,王者在十连的时候,每一个击中都会有停顿并且闪烁三次。

    其实不管是十连抽还是单抽,其算法逻辑都是一样,下面我们直接上干货

    因为我们是使用cocos引擎实现,所以对于每个奖励的位置,我们可以通过cocoStdio来进行摆放

  我们摆放好了位置之后,把导出的json文件加载进项目之中,我们就可以轻易的读取到响应奖励摆放的信息了。

  当他们平常的时候是蓝色,在转和选中的时候就给它置为黄色

    for i = 1, 10 do
        local des = "pnlGoods"..i                       -- 1-10的pnl
        local item = self.pnlReward:getChildByName(des)
        table.insert(self.items, item)
        des = "lbl"..i                                  -- 每个道具的数字文本
        local lbl = item:getChildByName(des)
        table.insert(self.lbls, lbl)
        des = "imgGet"                 
        local img = item:getChildByName(des)            -- 黄色状态
        table.insert(self.imgs, img)
    end

 实现转动的效果很简单,我们只需要用一个定时器去执行一个转动函数,转动函数里面记录了当前转到的位置,并把该位置的图片置为选中(黄色)状态,以及把当前位置的前一位置重新变回蓝色,递归调用,等转到想要的位置就停下来,就可以实现转动效果了。但是问题来了,如何实现速度从快到慢呢?说来也简单,我们只需要给这个转动函数设置一个运行时间参数,当递归调用时把下一次执行的时间传过去就可以了。

-- 单抽
function DrawScene:drawOne(sender, eventType)
    if eventType == ccui.TouchEventType.ended then
        self:onClick(sender)
        self:clean()
        local num = math.random(10)  -- 随机选一个抽到的位置
        self.num = num
        self.curNum = 1              -- 当前的位置
        self.sumNum = 1              -- 总共转动的次数
        self.effHandler = scheduler.scheduleGlobal(handler(self, self.runOneAct), 0.06)
    end
end

function DrawScene:runOneAct(time)
    scheduler.unscheduleGlobal(self.effHandler)  -- 先把之前的计时器释放掉
                                                 -- 不然速度不会变化
    local lastNum = self.curNum
    self.curNum = self.curNum + 1
    self.sumNum = self.sumNum + 1
    if (self.curNum > 10) then  -- 我们的总数是十个,转完10个后就从1开始
        self.curNum = 1
    end
    if(self.sumNum <= 10 * 2 + self.num) then
        local nextTime = 0.05   -- 我这里设置先转两圈,然后再在相应的位置停下
        if self.sumNum > 2 * 10  then
            nextTime = 0.05     -- 前两圈的速度是0.1秒,最后一圈加速0.05秒
        else
            nextTime = 0.1
        end
        self.imgs[self.curNum]:setVisible(true)  -- 当前的位置变黄
        self.imgs[lastNum]:setVisible(false)     -- 前一个位置变回蓝
        self.effHandler = scheduler.scheduleGlobal(handler(self, self.runOneAct), nextTime)
        return
    end
end

至于十连抽的效果也很简单,我们只需要在单抽的条件下,用一个数组存储击中的目标,然后执行多遍单抽的逻辑就可以了。

OK,今天的分享就到这里!谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值