转盘游戏代码总结

-- 转盘总奖项数
local TotalCount = 8
-- 转动最小圈数
local RoundCountMin = 12
-- 转动最大圈数
local RoundCountMax = 12

-- 开始抽奖  stopId 中间区域
function onStartDrawALotteryOrRaffle(stopId)
    -- 每个奖项占的角度
    local singleAngle = 360 / TotalCount
    -- 交界处处理
    local offsetAngle = 10

    local angleMin = (stopId - 1) * singleAngle

    local roundCount = math.random(RoundCountMin, RoundCountMax)

    return 360 * roundCount + angleMin + math.random(offsetAngle, singleAngle - offsetAngle)
end


function RotateTurntable(pSprite, inallTime, inallAngle, times, func)
    local data = {}
    local inallRadian = (inallAngle / 180.0) * math.pi
    local offsetTime = inallTime / times
    local offsetAngle =  inallRadian / (math.atan(inallTime*1.5) - math.atan(-inallTime *0.3))
    local startTime = - inallTime *0.3
    while (startTime <= inallTime*1.5) do

        local angle = (math.atan(startTime + offsetTime) - math.atan(startTime)) * offsetAngle * 180 / math.pi

        startTime = startTime + offsetTime

        local actionTo = cc.RotateBy:create(offsetTime, angle)

        data[#data+1] = actionTo
    end
    data[#data+1] = func

    pSprite:runAction(transition.sequence(data));
end

-- 调用
local angleTotal =  onStartDrawALotteryOrRaffle(1)  --  stopId = 1 ~ 8
local value = angleTotal - self.spin:getRotationSkewX()
self:RotateTurntable(self.spin, 5, value, 300, cc.CallFunc:create(function()
		-- 重置精灵旋转圈数
        self.spin:setRotation(angleTotal%360)
end)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值