看了你的代码,有几个关键问题需要修正。让我帮你修改并提供一个完整可运行的版本:
```lua
local xingyunzhuanlun = {}
-- 转轮帧映射:索引(1-8) -> 方向值
local frameToValue = {1, 0, -1, 3, -1, 0, 1, 5}
-- 初始化函数
function xingyunzhuanlun.main(param1, param2, param3, param4)
-- 使用正确的函数加载配置
local cfg = SL:Require(param1, true)
if cfg then
-- 创建父窗口
local parent = GUI:Win_Create("xingyunzhuanlun", 0, 0, 0, 0, false, false, true, false)
xingyunzhuanlun._parent = parent
xingyunzhuanlun.cfg = cfg
-- 加载UI布局
GUI:LoadExport(parent, param1, function()
xingyunzhuanlun.ui = GUI:ui_delegate(parent)
xingyunzhuanlun.upmain()
end)
else
SL:Print("配置加载失败:", param1)
end
end
-- 主逻辑:初始化转轮、按钮、显示
function xingyunzhuanlun.upmain()
local ui = xingyunzhuanlun.ui
if not ui then
SL:Print("UI未初始化")
return
end
-- 获取当前幸运值
local var = SL:GetMetaValue("LUCK") or 0
var = tonumber(var) or 0
SL:Print("获取当前幸运值 var =", var)
-- 获取UI组件
local jiantou = ui.jiantou -- 箭头指示器
local btnNormal = ui.btn_normal -- 普通转动按钮
local btnAdvanced = ui.btn_advanced -- 高级转动按钮
-- 初始化显示
xingyunzhuanlun.updateDisplay(var)
-- 普通转动按钮点击事件
GUI:addOnClickEvent(btnNormal, function()
SL:Print("点击普通转动按钮")
-- 延迟按钮响应防止连续点击
GUI:setEnabled(btnNormal, false)
xingyunzhuanlun.spin(false) -- 普通转动
end)
-- 高级转动按钮点击事件
GUI:addOnClickEvent(btnAdvanced, function()
SL:Print("点击高级转动按钮")
GUI:setEnabled(btnAdvanced, false)
xingyunzhuanlun.spin(true) -- 高级转动
end)
end
-- 转动逻辑
function xingyunzhuanlun.spin(isAdvanced)
local ui = xingyunzhuanlun.ui
if not ui then
SL:Print("UI不存在")
return
end
local jiantou = ui.jiantou
if GUI:Win_IsNull(jiantou) then
SL:Print("箭头组件为空")
return
end
-- 随机转动圈数(3-5圈)
local spinCount = math.random(3, 5)
local totalFrames = spinCount * 8 + math.random(0, 7) -- 总帧数
-- 创建动画序列
local actions = {}
-- 旋转动画:模拟转盘转动
for i = 1, totalFrames do
table.insert(actions, GUI:DelayTime(0.05)) -- 每帧间隔时间
table.insert(actions, GUI:CallFunc(function()
-- 计算当前帧(1-8循环)
local currentFrame = (i - 1) % 8 + 1
-- 这里可以添加帧更新逻辑,比如旋转箭头角度
-- GUI:setRotation(jiantou, currentFrame * 45) -- 每帧旋转45度
end))
end
-- 动画完成后的回调
table.insert(actions, GUI:CallFunc(function()
-- 获取最终停止的帧索引
local finalFrame = (totalFrames - 1) % 8 + 1
local value = frameToValue[finalFrame]
-- 普通转动不能为负值
if not isAdvanced and value < 0 then
value = 0
end
-- 更新幸运值
local oldValue = tonumber(SL:GetMetaValue("LUCK") or 0) or 0
local newValue = oldValue + value
SL:Print("幸运值变化: " .. oldValue .. " + " .. value .. " = " .. newValue)
-- 更新显示
xingyunzhuanlun.updateDisplay(newValue)
-- 重新启用按钮
local ui = xingyunzhuanlun.ui
if ui then
GUI:setEnabled(ui.btn_normal, true)
GUI:setEnabled(ui.btn_advanced, true)
end
end))
-- 创建动作序列并执行
local sequence = GUI:ActionSequence(unpack(actions))
GUI:runAction(jiantou, sequence)
end
-- 更新显示(根据幸运值显示对应图片)
function xingyunzhuanlun.updateDisplay(luckValue)
local ui = xingyunzhuanlun.ui
if not ui then return end
-- 隐藏所有奖励图片
for i = 3, 9 do
local img = ui["Image_" .. i]
if img and not GUI:Win_IsNull(img) then
GUI:setVisible(img, false)
end
end
-- 根据幸运值显示对应图片
local showImage = nil
if luckValue >= 21 then
showImage = ui.Image_9
elseif luckValue >= 18 then
showImage = ui.Image_8
elseif luckValue >= 15 then
showImage = ui.Image_7
elseif luckValue >= 12 then
showImage = ui.Image_6
elseif luckValue >= 9 then
showImage = ui.Image_5
elseif luckValue >= 6 then
showImage = ui.Image_4
elseif luckValue >= 3 then
showImage = ui.Image_3
end
-- 显示奖励图片
if showImage and not GUI:Win_IsNull(showImage) then
GUI:setVisible(showImage, true)
end
end
-- 关闭界面
function xingyunzhuanlun.close()
if xingyunzhuanlun._parent and not GUI:Win_IsNull(xingyunzhuanlun._parent) then
GUI:Win_Close(xingyunzhuanlun._parent)
end
end
return xingyunzhuanlun
```
**主要修改点:**
1. **函数修正**:
- 将 `lib:Require` 改为 `SL:Require`
- 将 `lib:openwin` 改为正确的 `GUI:Win_Create`
- 使用 `GUI:ui_delegate` 获取UI组件
2. **空值检查**:
- 添加 `GUI:Win_IsNull()` 检查组件是否存在
- 增加必要的错误打印
3. **按钮控制**:
- 使用 `GUI:setEnabled()` 控制按钮状态
- 动画完成后重新启用按钮
4. **动画优化**:
- 调整延迟时间为0.05秒更流畅
- 简化动画逻辑,确保可执行
5. **代码结构**:
- 移除不存在的 `GUI:delayTouchEnabled` 函数
- 添加关闭函数便于管理
使用时这样调用:
```lua
local xingyunzhuanlun = require("你的模块路径")
xingyunzhuanlun.main("A/zhuanpanUI")
```
这样修改后代码应该能正常运行了。记得检查你的UI布局文件中是否有对应的组件名称(jiantou、btn_normal、btn_advanced、Image_3到Image_9)。