local function zhuanpan(msgID, msgData)
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
local parent = GUI:Win_Create("zhuanpan", 0, 0, 0, 0, false, false, true, false,
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-21 17:13:56 |
👁️ 阅读: 16
根据浮生梦老师前端课程内容,我看到你已经有转盘动画的基础框架,我来帮你完善点击按钮后的转盘逻辑。我会参考已有的转盘案例来补充功能。
```lua
local function zhuanpan(msgID, msgData)
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH", 0)
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT", 0)
local parent = GUI:Win_Create("zhuanpan", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:Win_SetMainHide(parent, true)
-- 第一个序列帧
local fullScreenAnim = GUI:Frames_Create(
parent,
"FullScreenFrames",
screenWidth/2,
screenHeight/2,
"res/yuding/donghua/a/a",
".png",
1,
15,
{speed = 100, count = 15, loop = 1}
)
GUI:setAnchorPoint(fullScreenAnim, 0.5, 0.5)
GUI:setContentSize(fullScreenAnim, screenWidth, screenHeight)
GUI:setIgnoreContentAdaptWithSize(fullScreenAnim, false)
-- 第一个序列帧播放完成后的处理
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(fullScreenAnim) then
GUI:removeFromParent(fullScreenAnim)
end
-- 创建第二个序列帧
local secondAnim = GUI:Frames_Create(
parent,
"SecondFrames",
screenWidth/2,
screenHeight/2,
"res/yuding/donghua/b/b",
".png",
1,
15,
{speed = 100, count = 15, loop = -1}
)
GUI:setAnchorPoint(secondAnim, 0.5, 0.5)
GUI:setContentSize(secondAnim, screenWidth, screenHeight)
GUI:setIgnoreContentAdaptWithSize(secondAnim, false)
-- 创建第三个序列帧(初始透明)
local disan = GUI:Frames_Create(
parent,
"threeFrames",
screenWidth/2,
screenHeight/2,
"res/yuding/donghua/d/d",
".png",
1,
25,
{speed = 50, count = 25, loop = -1}
)
local disanPos = GUI:getContentSize(disan)
local beimian = GUI:Button_Create(disan, "bt1",disanPos.width/2-70,disanPos.height/2-300, "res/yuding/donghua/2.png")
GUI:setAnchorPoint(disan, 0.5, 0.5)
GUI:setIgnoreContentAdaptWithSize(disan, false)
GUI:setChildrenCascadeOpacityEnabled(disan, true)
GUI:setOpacity(disan, 0) -- 初始完全透明
-- 2秒后淡入第三个序列帧,并在淡入完成后执行回调
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(disan) then
-- 使用动作序列实现淡入效果
GUI:runAction(disan, GUI:ActionSequence(
GUI:ActionFadeTo(0.5, 255), -- 注意:使用ActionFadeTo而不是ActionFadeIn
GUI:CallFunc(function()
-- 添加转盘按钮事件
GUI:Button_setTitleText(beimian, "开始转盘")
GUI:Button_setTitleFontSize(beimian, 16)
-- 点击按钮执行转盘逻辑
GUI:addOnClickEvent(beimian, function()
GUI:setEnabled(beimian, false) -- 禁用按钮防止重复点击
-- 模拟转盘动画逻辑
local maxNum = 9 -- 奖励道具上限
local turnsNum = 2 -- 轮盘空转圈数
local start_idx = 1 -- 起始索引
local gift_idx = math.random(1, 9) -- 随机奖励索引
-- 计算动画次数
local randomNum = turnsNum * maxNum
local anim_num = randomNum - ((start_idx + randomNum) % maxNum - gift_idx)
SL:Print("开始转盘动画,目标奖励索引:" .. gift_idx)
-- 这里可以添加实际的转盘动画逻辑
-- 例如:高亮显示转盘项目、旋转动画等
-- 动画完成后显示结果
SL:ScheduleOnce(function()
SL:Print("转盘停止,获得奖励索引:" .. gift_idx)
-- 显示获得奖励
local rewardText = GUI:Text_Create(
parent,
"rewardText",
screenWidth/2,
screenHeight/2 + 100,
24,
"#ffcc00",
"恭喜获得奖励!"
)
GUI:setAnchorPoint(rewardText, 0.5, 0.5)
-- 淡出效果
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(rewardText) then
GUI:runAction(rewardText, GUI:ActionSequence(
GUI:ActionFadeTo(1.0, 0),
GUI:CallFunc(function()
GUI:removeFromParent(rewardText)
end)
))
end
end, 2)
-- 重新启用按钮
GUI:setEnabled(beimian, true)
end, 2) -- 2秒后显示结果
end)
end)
))
end
end, 0.1)
end, 1)
end
SL:RegisterNetMsg(1030, zhuanpan)
```
主要补充的转盘逻辑:
1. **按钮点击事件**:点击"开始转盘"按钮后触发转盘逻辑
2. **防重复点击**:使用`GUI:setEnabled(beimian, false)`禁用按钮,防止重复点击
3. **转盘计算**:模拟转盘动画的数学计算,包括目标奖励索引和动画次数
4. **结果显示**:动画完成后显示获得的奖励信息
5. **动画效果**:使用淡入淡出效果增强视觉体验
注意:这里使用了`GUI:ActionFadeTo`而不是`GUI:ActionFadeIn`,因为根据课程内容,`ActionFadeTo`需要指定时间和透明度参数。如果你需要更复杂的转盘动画(如旋转、高亮等),可以参考课程中的转盘案例进一步扩展。
← 返回问答库