local ui, root = GUI:npcUI("shijieditu")
local reLevel = SL:GetMetaValue("RELEVEL") or 0
-- if GUI:Win_IsNotNull(ui.Panel_7) then
-- GUI:setTouchEnabled(ui.Panel_7, false)
-- GUI:setTouchEnabled(ui.Panel_7, false)
-- GUI:setOpacity(ui.
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-17 19:21:10 |
👁️ 阅读: 6
要实现点击按钮后人物下地图时黑屏再亮的效果,需要添加一个全屏遮罩层,并在传送前显示遮罩,传送后淡出遮罩。以下是完整的代码修改:
```lua
local ui, root = GUI:npcUI("shijieditu")
local reLevel = SL:GetMetaValue("RELEVEL") or 0
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH") or 1280
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT") or 720
-- 创建全屏半透明黑色背景(用于界面关闭)
local bgLayer = GUI:Layout_Create(root, "transparent_bg", 0, 0, 0, 0, false)
GUI:setLocalZOrder(bgLayer, -1)
GUI:setContentSize(bgLayer, {width = screenWidth, height = screenHeight})
GUI:setPosition(bgLayer, screenWidth/2, screenHeight/2)
GUI:setAnchorPoint(bgLayer, 0.5, 0.5)
GUI:Layout_setBackGroundColorType(bgLayer, 1)
GUI:Layout_setBackGroundColor(bgLayer, "#000000")
GUI:Layout_setBackGroundColorOpacity(bgLayer, 150)
GUI:setOpacity(bgLayer, 0)
GUI:setTouchEnabled(bgLayer, true)
GUI:addOnClickEvent(bgLayer, function()
GUI:Win_CloseAll()
end)
-- 创建全屏黑屏遮罩(用于传送效果)
local blackMask = GUI:Layout_Create(root, "black_mask", 0, 0, screenWidth, screenHeight, false)
GUI:setLocalZOrder(blackMask, 9999) -- 最高层级
GUI:setPosition(blackMask, screenWidth/2, screenHeight/2)
GUI:setAnchorPoint(blackMask, 0.5, 0.5)
GUI:Layout_setBackGroundColorType(blackMask, 1)
GUI:Layout_setBackGroundColor(blackMask, "#000000")
GUI:Layout_setBackGroundColorOpacity(blackMask, 255)
GUI:setOpacity(blackMask, 0)
GUI:setVisible(blackMask, false) -- 初始隐藏
GUI:setTouchEnabled(blackMask, false)
-- 淡入背景层
if GUI:Win_IsNotNull(bgLayer) then
GUI:runAction(bgLayer, GUI:ActionFadeTo(0.5, 255))
end
if GUI:Win_IsNotNull(root) then
GUI:runAction(root, GUI:ActionFadeTo(0.3, 255))
end
-- 关闭按钮事件
if GUI:Win_IsNotNull(ui.guanbi) then
GUI:addOnClickEvent(ui.guanbi, function()
GUI:delayTouchEnabled(ui.guanbi, 0.2)
local fadeOutAction = GUI:ActionSequence(
GUI:ActionFadeTo(0.3, 0),
GUI:CallFunc(function()
GUI:Win_CloseAll()
end)
)
if GUI:Win_IsNotNull(bgLayer) then
GUI:runAction(bgLayer, fadeOutAction)
end
if GUI:Win_IsNotNull(root) then
GUI:runAction(root, fadeOutAction)
end
end)
end
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)
end
if GUI:Win_IsNotNull(ui[effect_name]) then
GUI:setVisible(ui[effect_name], false)
end
end
-- 创建传送函数(黑屏效果)
local function teleportWithBlackScreen(msgType)
-- 显示黑屏遮罩
GUI:setVisible(blackMask, true)
GUI:setOpacity(blackMask, 0)
-- 黑屏淡入(快速变黑)
GUI:runAction(blackMask, GUI:ActionSequence(
GUI:ActionFadeTo(0.2, 255),
GUI:CallFunc(function()
-- 发送传送消息
SL:SendLuaNetMsg(58004, 0, msgType, 0, 0)
SL:print("发送传送消息:" .. msgType)
-- 延迟后淡出黑屏
SL:ScheduleOnce(function()
if GUI:Win_IsNotNull(blackMask) then
GUI:runAction(blackMask, GUI:ActionSequence(
GUI:ActionFadeTo(0.5, 0),
GUI:CallFunc(function()
GUI:setVisible(blackMask, false)
GUI:Win_CloseAll()
end)
))
else
GUI:Win_CloseAll()
end
end, 0.5) -- 黑屏保持0.5秒
end)
))
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
GUI:setVisible(ui[btn_name], true)
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)
-- 使用黑屏效果传送
teleportWithBlackScreen(requirement.msgType)
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. **添加黑屏遮罩层**:创建了一个全屏的`blackMask`层,设置层级为9999确保在最上层
2. **传送函数**:`teleportWithBlackScreen`函数处理黑屏效果:
- 先显示黑屏并淡入(0.2秒变黑)
- 发送传送消息
- 延迟0.5秒后淡出黑屏(0.5秒变亮)
- 最后关闭界面
3. **按钮事件修改**:所有按钮点击事件都调用`teleportWithBlackScreen`函数
4. **使用正确函数**:
- `GUI:ActionFadeTo` 用于淡入淡出
- `SL:ScheduleOnce` 用于延迟执行
- `GUI:setVisible` 控制显示隐藏
这样当点击按钮时,会先快速黑屏(0.2秒),保持黑屏0.5秒(模拟传送过程),然后慢慢亮起(0.5秒),最后关闭界面。
要实现点击按钮后人物下地图时黑屏再亮的效果,需要添加一个全屏遮罩层,并在传送前显示遮罩,传送后淡出遮罩。以下是完整的代码修改:
```lua
local ui, root = GUI:npcUI("shijieditu")
local reLevel = SL:GetMetaValue("RELEVEL") or 0
local screenWidth = SL:GetMetaValue("SCREEN_WIDTH") or 1280
local screenHeight = SL:GetMetaValue("SCREEN_HEIGHT") or 720
-- 创建全屏半透明黑色背景(用于界面关闭)
local bgLayer = GUI:Layout_Create(root, "transparent_bg", 0, 0, 0, 0, false)
GUI:setLocalZOrder(bgLayer, -1)
GUI:setContentSize(bgLayer, {width = screenWidth, height = screenHeight})
GUI:setPosition(bgLayer, screenWidth/2, screenHeight/2)
GUI:setAnchorPoint(bgLayer, 0.5, 0.5)
GUI:Layout_setBackGroundColorType(bgLayer, 1)
GUI:Layout_setBackGroundColor(bgLayer, "#000000")
GUI:Layout_setBackGroundColorOpacity(bgLayer, 150)
GUI:setOpacity(bgLayer, 0)
GUI:setTouchEnabled(bgLayer, true)
GUI:addOnClickEvent(bgLayer, function()
GUI:Win_CloseAll()
end)
-- 创建全屏黑屏遮罩(用于传送效果)
local blackMask = GUI:Layout_Create(root, "black_mask", 0, 0, screenWidth, screenHeight, false)
GUI:setLocalZOrder(blackMask, 9999) -- 最高层级
GUI:setPosition(blackMask, screenWidth/2, screenHeight/2)
GUI:setAnchorPoint(blackMask, 0.5, 0.5)
GUI:Layout_setBackGroundColorType(blackMask, 1)
GUI:Layout_setBackGroundColor(blackMask, "#000000")
GUI:Layout_setBackGroundColorOpacity(blackMask, 255)
GUI:setOpacity(blackMask, 0)
GUI:setVisible(blackMask, false) -- 初始隐藏
GUI:setTouchEnabled(blackMask, false)
-- 淡入背景层
if GUI:Win_IsNotNull(bgLayer) then
GUI:runAction(bgLayer, GUI:ActionFadeTo(0.5, 255))
end
if GUI:Win_IsNotNull(root) then
GUI:runAction(root, GUI:ActionFadeTo(0.3, 255))
end
-- 关闭按钮事件
if GUI:Win_IsNotNull(ui.guanbi) then
GUI:addOnClickEvent(ui.guanbi, function()
GUI:delayTouchEnabled(ui.guanbi, 0.2)
local fadeOutAction = GUI:ActionSequence(
GUI:ActionFadeTo(0.3, 0),
GUI:CallFunc(function()
GUI:Win_CloseAll()
end)
)
if GUI:Win_IsNotNull(bgLayer) then
GUI:runAction(bgLayer, fadeOutAction)
end
if GUI:Win_IsNotNull(root) then
GUI:runAction(root, fadeOutAction)
end
end)
end
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)
end
if GUI:Win_IsNotNull(ui[effect_name]) then
GUI:setVisible(ui[effect_name], false)
end
end
-- 创建传送函数(黑屏效果)
local function teleportWithBlackScreen(msgType)
-- 显示黑屏遮罩
GUI:setVisible(blackMask, true)
GUI:setOpacity(blackMask, 0)
-- 黑屏淡入(快速变黑)
GUI:runAction(blackMask, GUI:ActionSequence(
GUI:ActionFadeTo(0.2, 255),
GUI:CallFunc(function()
-- 发送传送消息
SL:SendLuaNetMsg(58004, 0, msgType, 0, 0)
SL:print("发送传送消息:" .. msgType)
-- 延迟后淡出黑屏
SL:ScheduleOnce(function()
if GUI:Win_IsNotNull(blackMask) then
GUI:runAction(blackMask, GUI:ActionSequence(
GUI:ActionFadeTo(0.5, 0),
GUI:CallFunc(function()
GUI:setVisible(blackMask, false)
GUI:Win_CloseAll()
end)
))
else
GUI:Win_CloseAll()
end
end, 0.5) -- 黑屏保持0.5秒
end)
))
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
GUI:setVisible(ui[btn_name], true)
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)
-- 使用黑屏效果传送
teleportWithBlackScreen(requirement.msgType)
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. **添加黑屏遮罩层**:创建了一个全屏的`blackMask`层,设置层级为9999确保在最上层
2. **传送函数**:`teleportWithBlackScreen`函数处理黑屏效果:
- 先显示黑屏并淡入(0.2秒变黑)
- 发送传送消息
- 延迟0.5秒后淡出黑屏(0.5秒变亮)
- 最后关闭界面
3. **按钮事件修改**:所有按钮点击事件都调用`teleportWithBlackScreen`函数
4. **使用正确函数**:
- `GUI:ActionFadeTo` 用于淡入淡出
- `SL:ScheduleOnce` 用于延迟执行
- `GUI:setVisible` 控制显示隐藏
这样当点击按钮时,会先快速黑屏(0.2秒),保持黑屏0.5秒(模拟传送过程),然后慢慢亮起(0.5秒),最后关闭界面。
← 返回问答库