local ui, root = GUI:npcUI("shijieditu")
-- 获取当前转生等级
local reLevel = SL:GetMetaValue("RELEVEL") or 0
local levelRequirements = {
{level = 5, button = 1, effect = 1, msgType = 33},
{level = 10, button = 2, effect = 2, msgType = 34},
{lev
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-17 13:39:31 |
👁️ 阅读: 6
根据浮生梦老师前端课程内容,我来帮你修改代码,添加半透明窗口效果和淡入效果。主要修改点如下:
1. 创建半透明窗口
2. 添加淡入效果
3. 优化代码结构
```lua
local ui, root = GUI:npcUI("shijieditu")
-- 创建半透明窗口
local transparentWindow = GUI:Win_Create("TransparentWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:setOpacity(transparentWindow, 128) -- 设置半透明(0-255,128为50%透明度)
-- 获取当前转生等级
local reLevel = SL:GetMetaValue("RELEVEL") or 0
local levelRequirements = {
{level = 5, button = 1, effect = 1, msgType = 33},
{level = 10, button = 2, effect = 2, msgType = 34},
{level = 15, button = 3, effect = 3, msgType = 35},
{level = 20, button = 4, effect = 4, msgType = 36},
{level = 25, button = 5, effect = 5, msgType = 37},
{level = 30, button = 6, effect = 6, msgType = 38},
{level = 35, button = 7, effect = 7, msgType = 39},
{level = 40, button = 8, effect = 8, msgType = 40},
{level = 45, button = 9, effect = 9, msgType = 41}
}
-- 初始隐藏所有按钮和特效
for i = 1, 9 do
local button_name = "Button_" .. i
local effect_name = "Effect_" .. i
if GUI:Win_IsNotNull(ui[button_name]) then
GUI:setVisible(ui[button_name], false)
-- 设置按钮半透明
GUI:setOpacity(ui[button_name], 180)
end
if GUI:Win_IsNotNull(ui[effect_name]) then
GUI:setVisible(ui[effect_name], false)
end
end
-- 添加淡入效果函数
local function fadeInWidget(widget)
if GUI:Win_IsNotNull(widget) then
GUI:setVisible(widget, true)
GUI:setOpacity(widget, 0) -- 先设置为完全透明
GUI:runAction(widget, GUI:ActionFadeIn(0.5)) -- 0.5秒淡入效果
end
end
-- 应用淡入效果到主窗口
if GUI:Win_IsNotNull(root) then
GUI:setOpacity(root, 0)
GUI:runAction(root, GUI:ActionFadeIn(0.8))
end
for _, requirement in ipairs(levelRequirements) do
local button_name = "Button_" .. requirement.button
local effect_name = "Effect_" .. requirement.effect
if reLevel >= requirement.level then
-- 使用淡入效果显示按钮
for i = 1, requirement.button do
local btn_name = "Button_" .. i
if GUI:Win_IsNotNull(ui[btn_name]) then
fadeInWidget(ui[btn_name])
end
end
-- 显示特效
for i = 1, requirement.effect do
local eff_name = "Effect_" .. i
if GUI:Win_IsNotNull(ui[eff_name]) then
GUI:setVisible(ui[eff_name], true)
end
end
if GUI:Win_IsNotNull(ui[button_name]) then
GUI:addOnClickEvent(ui[button_name], function()
SL:print("点击了第" .. requirement.button .. "个按钮,转生等级:" .. reLevel)
GUI:delayTouchEnabled(ui[button_name], 0.2)
SL:SendLuaNetMsg(58004, 0, requirement.msgType, 0, 0)
-- 添加淡出效果后关闭
GUI:runAction(root, GUI:ActionSequence(
GUI:ActionFadeOut(0.3),
GUI:CallFunc(function()
GUI:Win_CloseAll()
end)
))
end)
end
end
end
-- 注册游戏事件(保持原有逻辑)
SL:RegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "shijieditu", function(data)
if data and data.opera == 1 then
shijieditu.upmain()
end
end)
SL:RegisterLUAEvent(LUA_EVENT_REINLEVELCHANGE, "shijieditu", function(data)
shijieditu.upmain()
end)
SL:RegisterLUAEvent(LUA_EVENT_Win_Close, "shijieditu", function(Win_Closedata)
if Win_Closedata and Win_Closedata == "shijieditu" then
SL:UnRegisterLUAEvent(LUA_EVENT_PLAYER_EQUIP_CHANGE, "shijieditu")
SL:UnRegisterLUAEvent(LUA_EVENT_REINLEVELCHANGE, "shijieditu")
SL:UnRegisterLUAEvent(LUA_EVENT_Win_Close, "shijieditu")
end
end)
```
**主要修改说明:**
1. **半透明窗口**:创建了一个透明度为128(50%)的透明窗口
2. **淡入效果**:
- 主窗口使用`GUI:ActionFadeIn(0.8)`实现0.8秒淡入
- 按钮使用`fadeInWidget`函数实现0.5秒淡入
3. **点击效果**:点击按钮后添加淡出效果再关闭界面
4. **透明度设置**:
- `GUI:setOpacity(widget, value)` - 设置控件透明度(0-255)
- `GUI:ActionFadeIn(time)` - 淡入动作
- `GUI:ActionFadeOut(time)` - 淡出动作
这样修改后,界面会有很好的半透明和淡入淡出视觉效果,用户体验更佳!
← 返回问答库