在这里演示下双转盘抽奖
内转盘顺时针转动 外转盘逆时针转动
内转盘转到的颜色 外转盘一定要转到对应颜色的位置(比如内转盘转到红色 外转盘就只能转到红色的东西 反之其他都一样)
简单理解:算出内外转盘只差 然后加上一圈的n倍就可以实现
--model层数据
local UIDoubleTurntableModel = BaseClass("UIDoubleTurntableModel", UIBaseModel)
local base = UIBaseModel-- 创建
local function OnCreate(self)
base.OnCreate(self)
-- 窗口生命周期内保持的成员变量放这
--内颜色
--[["1001.png", --红
"1002.png", --蓝色
"20011.png", --黄色
"40000.png", --绿色]]
self.colorData={Color.red,Color.yellow,Color.blue}
self.inData={ {1,4,7,11},{2,5,12,8},{3,6,9,10}}
self.OutData={ {"1001.png","21101.png","21102.png","21103.png"},
{"20011.png","20012.png","20013.png","43003.png"},
{"21200.png","21201.png","21202.png","21203.png"}
}
end
--view层显示
--[[
-- added by author @ 2023/11/22 16:07:26
-- UIDoubleTurntable视图层
-- 注意:
-- 1、成员变量最好预先在__init函数声明,提高代码可读性
-- 2、OnEnable函数每次在窗口打开时调用,直接刷新
-- 3、组件命名参考代码规范
--]]
local UIDoubleTurntableView = BaseClass("UIDoubleTurntableView", UIBaseView)
local base = UIBaseView
local angle
local function OnCreate(self)
base.OnCreate(self)
-- 窗口生命周期内保持的成员变量放这
self.icons={}
angle=360/12
for k = 1, 12, 1 do
self.icons[k]={}
self.icons[k].inImg=self:AddComponent(UIImage,"UITurntable/InImage/Parent/"..k)
self.icons[k].outImg=self:AddComponent(UIImage,"UITurntable/OutImage/Parent/"..k,AtlasConfig.Goods)
local red=(90-angle*(k-1))*Mathf.Deg2Rad
self.icons[k].inImg.transform.localPosition=Vector3(Mathf.Cos(red)*150,Mathf.Sin(red)*150,0)
self.icons[k].outImg.transform.localPosition=Vector3(Mathf.Cos(red)*280,Mathf.Sin(red)*280,0)
for index, value in ipairs(self.model.inData) do
for k1, v1 in ipairs(value) do
if v1==k then
self.icons[k].inImg:SetColor(self.model.colorData[index])
self.icons[k].outImg:SetSpriteName(self.model.OutData[index][k1])
break
end
end
end
end
local inImgPoint=self:AddComponent(UIImage,"UITurntable/GameObject/Arrow")
local img=self:AddComponent(UIImage,"UITurntable/OutImage/Parent")
self.rafflebtn=self:AddComponent(UIButton,"UITurntable/GameObject/Rafflebtn")
self.rafflebtn:SetOnClick(function ()
local randonColorIndex=Mathf.Random(1,3) --先随机颜色区域
local randonColorTableIndex=Mathf.Random(1,4) --在随机颜色里的下标
local randonIndex=self.model.inData[randonColorIndex][randonColorTableIndex]
--内层区域的角度
local tempAngle=angle*(randonIndex-1)+2*360
--随机外层区域的下标
local outTangeIndex=Mathf.Random(1,4)
local s = self.model.inData[randonColorIndex][outTangeIndex]
--外层区域的旋转角度
local outtempAngle=(s-randonIndex)*angle+360*2
print(randonIndex)
img.transform:DOLocalRotate(Vector3(0,0,outtempAngle),5,
CS.DG.Tweening.RotateMode.FastBeyond360):SetEase(CS.DG.Tweening.Ease.InOutCirc)
:OnComplete(function ()
self.tips:SetActive(true)
self.tipsImg:SetSpriteName(self.model.OutData[randonColorIndex][outTangeIndex])
end)
inImgPoint.transform:DOLocalRotate(-Vector3(0,0,tempAngle),3,
CS.DG.Tweening.RotateMode.FastBeyond360):SetEase(CS.DG.Tweening.Ease.InOutCirc)
:OnComplete(function ()
end)
end)
--提示
self.tips=self:AddComponent(UIImage,"UITurntable/Tips")
self.closeTipsBtn=self:AddComponent(UIButton,"UITurntable/Tips/CloseBtn")
self.tipsImg=self:AddComponent(UIImage,"UITurntable/Tips/Awa",AtlasConfig.Goods)
self.closeTipsBtn:SetOnClick(function ()
img.transform:DOLocalRotate(Vector3(0,0,0),0.01):OnComplete(function ()
for k, v in ipairs(self.model.turnTableData) do
local rad=(90-angle*(k-1))*Mathf.Deg2Rad
self.icons[k].transform.localPosition=Vector3(Mathf.Cos(rad)*150,Mathf.Sin(rad)*150,0)
end
end)
inImgPoint.transform.localEulerAngles=Vector3.zero
self.tips:SetActive(false)
end)
self.tips:SetActive(false)
-- self.closeTipsBtn:SetOnClick(function ()
-- img.transform:DOLocalRotate(Vector3(0,0,360),5,CS.DG.Tweening.RotateMode.FastBeyond360):SetEase(CS.DG.Twnneing.Ease.InOurCire):OnComplete(function ()
-- end)
-- end)
end
-- 打开
local function OnEnable(self)
base.OnEnable(self)
-- 窗口关闭时可以清理的成员变量放这
end
-- 关闭
local function OnDestroy(self)
base.OnDestroy(self)
-- 清理成员变量
end
UIDoubleTurntableView.OnCreate = OnCreate
UIDoubleTurntableView.OnEnable = OnEnable
UIDoubleTurntableView.OnDestroy = OnDestroy
return UIDoubleTurntableView