游戏中的抽奖

在这里演示下双转盘抽奖

内转盘顺时针转动  外转盘逆时针转动  

内转盘转到的颜色  外转盘一定要转到对应颜色的位置(比如内转盘转到红色 外转盘就只能转到红色的东西  反之其他都一样)

简单理解:算出内外转盘只差  然后加上一圈的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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值