local zhuansheng = {}
function zhuansheng.main(param1, param2, param3, param4)
SL:print("===== 转生界面打开 =====")
lib:Require(param1, function(state)
if state then
if param1 then
zhuansheng.parent = lib:o
根据你的需求,需要在转生界面中,当玩家点击升级按钮后,弹出一个提示窗口(使用 `Image_2` 控件),持续显示2秒后渐隐。如果玩家在期间继续点击升级,则重置计时器,直到玩家停止操作1秒后再渐隐消失。这个提示窗口的显示内容需要跟随当前转生等级 `level` 变化。
以下是实现这个功能的代码修改方案,主要修改 `zhuansheng.upmain()` 函数中的升级按钮点击事件:
```lua
-- 在 zhuansheng 模块的顶部或合适位置定义提示窗口相关的变量
zhuansheng.tipTimer = nil -- 用于控制渐隐的定时器
zhuansheng.tipDelayTimer = nil -- 用于延迟1秒的定时器
zhuansheng.tipWidget = nil -- 提示窗口控件
zhuansheng.isTipShowing = false -- 标记提示窗口是否正在显示
zhuansheng.lastClickTime = 0 -- 记录最后一次点击的时间,用于防连点
function zhuansheng.showLevelTip(level)
-- 如果提示窗口已存在,先移除之前的
if zhuansheng.tipWidget and not GUI:Win_IsNull(zhuansheng.tipWidget) then
GUI:removeFromParent(zhuansheng.tipWidget)
zhuansheng.tipWidget = nil
end
-- 清除之前的定时器
if zhuansheng.tipTimer then
SL:UnSchedule(zhuansheng.tipTimer)
zhuansheng.tipTimer = nil
end
if zhuansheng.tipDelayTimer then
SL:UnSchedule(zhuansheng.tipDelayTimer)
zhuansheng.tipDelayTimer = nil
end
-- 获取当前界面作为父节点
local ui = zhuansheng.parent._ui
local parent = ui.root or zhuansheng.parent._parent
-- 创建提示窗口(使用Image_2控件)
zhuansheng.tipWidget = GUI:Image_Create(parent, "level_tip", 0, 0, "public_win32/1900000610.png")
GUI:setAnchorPoint(zhuansheng.tipWidget, 0.5, 0.5)
GUI:setPosition(zhuansheng.tipWidget, 400, 300) -- 根据实际界面调整坐标
-- 创建显示等级的文字
local levelText = GUI:Text_Create(zhuansheng.tipWidget, "tip_text", 0, 0, 24, "#FFFFFF", "转生等级: " .. level)
GUI:Text_enableOutline(levelText, "#000000", 2)
GUI:setAnchorPoint(levelText, 0.5, 0.5)
-- 设置初始透明度为0(完全透明)
GUI:setOpacity(zhuansheng.tipWidget, 0)
GUI:setVisible(zhuansheng.tipWidget, true)
-- 淡入动画
GUI:runAction(zhuansheng.tipWidget, GUI:ActionFadeIn(0.3))
zhuansheng.isTipShowing = true
zhuansheng.lastClickTime = SL:GetTime()
-- 启动2秒后开始渐隐的定时器
zhuansheng.tipTimer = SL:ScheduleOnce(function()
zhuansheng.startHideTip()
end, 2.0)
end
function zhuansheng.startHideTip()
-- 先清除延迟定时器
if zhuansheng.tipDelayTimer then
SL:UnSchedule(zhuansheng.tipDelayTimer)
zhuansheng.tipDelayTimer = nil
end
-- 设置1秒延迟后再真正渐隐
zhuansheng.tipDelayTimer = SL:ScheduleOnce(function()
zhuansheng.hideTip()
end, 1.0)
end
function zhuansheng.hideTip()
if zhuansheng.tipWidget and not GUI:Win_IsNull(zhuansheng.tipWidget) then
-- 淡出动画
GUI:runAction(zhuansheng.tipWidget, GUI:ActionSequence(
GUI:ActionFadeOut(0.5),
GUI:CallFunc(function()
if zhuansheng.tipWidget and not GUI:Win_IsNull(zhuansheng.tipWidget) then
GUI:removeFromParent(zhuansheng.tipWidget)
zhuansheng.tipWidget = nil
end
zhuansheng.isTipShowing = false
end)
))
end
zhuansheng.isTipShowing = false
end
function zhuansheng.resetTipTimer()
-- 清除之前的定时器
if zhuansheng.tipTimer then
SL:UnSchedule(zhuansheng.tipTimer)
zhuansheng.tipTimer = nil
end
if zhuansheng.tipDelayTimer then
SL:UnSchedule(zhuansheng.tipDelayTimer)
zhuansheng.tipDelayTimer = nil
end
-- 重新启动2秒定时器
zhuansheng.tipTimer = SL:ScheduleOnce(function()
zhuansheng.startHideTip()
end, 2.0)
zhuansheng.lastClickTime = SL:GetTime()
end
-- 修改升级按钮的点击事件
function zhuansheng.upmain()
SL:print("===== 更新转生界面 =====")
if not zhuansheng.parent or not zhuansheng.parent._ui then
return
end
local curLevel = lib:get_zs_level() or 0
local ui = zhuansheng.parent._ui
local cfgs = zhuansheng.parent.cfg
-- ... 其他现有代码保持不变 ...
-- 设置升级按钮(修改点击事件)
if GUI:Win_IsNotNull(ui["Button_1"]) then
GUI:addOnClickEvent(ui["Button_1"], function()
SL:print("点击升级按钮")
-- 防连点处理(0.5秒内只响应一次)
local currentTime = SL:GetTime()
if currentTime - zhuansheng.lastClickTime < 0.5 then
return
end
if not lib:checkitem(next_cfg) then
return
end
GUI:delayTouchEnabled(ui["Button_1"], 0.2)
-- 发送升级请求
local msg = {}
msg.Script = zhuansheng.param1
local jsonstr = SL:JsonEncode(msg)
SL:SendLuaNetMsg(58003, 0, 0, 0, jsonstr)
-- 显示或更新提示窗口
if zhuansheng.isTipShowing then
-- 如果提示窗口正在显示,重置定时器
zhuansheng.resetTipTimer()
-- 更新等级显示
if zhuansheng.tipWidget and not GUI:Win_IsNull(zhuansheng.tipWidget) then
local textWidget = GUI:getChildByName(zhuansheng.tipWidget, "tip_text")
if textWidget and not GUI:Win_IsNull(textWidget) then
GUI:Text_setString(textWidget, "转生等级: " .. (curLevel + 1))
end
end
else
-- 如果提示窗口没有显示,创建新的
zhuansheng.showLevelTip(curLevel + 1)
end
end)
end
SL:print("===== 界面更新完成 =====")
end
-- 在关闭界面时清理资源
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, "zhuansheng", function(CLOSEWINdata)
if CLOSEWINdata and CLOSEWINdata == "zhuansheng" then
-- 清理提示窗口相关资源
if zhuansheng.tipWidget and not GUI:Win_IsNull(zhuansheng.tipWidget) then
GUI:removeFromParent(zhuansheng.tipWidget)
zhuansheng.tipWidget = nil
end
if zhuansheng.tipTimer then
SL:UnSchedule(zhuansheng.tipTimer)
zhuansheng.tipTimer = nil
end
if zhuansheng.tipDelayTimer then
SL:UnSchedule(zhuansheng.tipDelayTimer)
zhuansheng.tipDelayTimer = nil
end
zhuansheng.isTipShowing = false
-- 原有的事件注销
SL:UnRegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "zhuansheng")
SL:UnRegisterLUAEvent(LUA_EVENT_REINLEVELCHANGE, "zhuansheng")
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, "zhuansheng")
end
end)
```
**功能说明:**
1. **提示窗口创建**:使用 `GUI:Image_Create()` 创建背景,使用 `GUI:Text_Create()` 创建等级文字
2. **淡入淡出效果**:使用 `GUI:ActionFadeIn()` 和 `GUI:ActionFadeOut()` 实现
3. **定时器管理**:
- `zhuansheng.tipTimer`:控制2秒后开始延迟渐隐
- `zhuansheng.tipDelayTimer`:控制1秒延迟后执行渐隐
4. **点击重置**:玩家每次点击升级按钮都会重置定时器,实现"延迟时间"效果
5. **等级跟随**:提示窗口显示当前等级+1(即将达到的等级)
6. **资源清理**:在界面关闭时清理所有相关资源
**注意事项:**
- 图片路径使用你指定的 `public_win32/1900000610.png`
- 坐标 `(400, 300)` 需要根据实际界面布局调整
- 防连点设置为0.5秒,可根据需要调整
- 所有定时器都使用 `SL:ScheduleOnce()` 确保正确管理
这样实现后,每次点击升级按钮都会弹出提示窗口,如果连续点击则窗口持续显示,停止点击1秒后窗口渐隐消失。