用996引擎前端lua编写一个人物切换地图淡入淡出效果显示当前地图名字
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-01 16:54:01 |
👁️ 阅读: 37
我来帮你编写一个地图切换时显示地图名字的淡入淡出效果。这个功能会在地图切换时触发,显示当前地图名称并伴有渐入渐出的动画效果。
```lua
-- 创建地图名称显示界面
local MapNameDisplay = {}
function MapNameDisplay:init()
-- 创建父节点
self.parent = GUI:Win_Create("MapNameDisplay", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建背景图片
self.bg = GUI:Image_Create(self.parent, "bg_mapname", 0, 0, "res/public/1900000610.png")
GUI:setPosition(self.bg, 0, 0)
-- 创建地图名称文本
self.textMapName = GUI:Text_Create(self.parent, "Text_mapName", 0, 0, 24, "#ffffff", "")
GUI:Text_setFontName(self.textMapName, "fonts/font5.ttf")
-- 初始设置为不可见
GUI:setVisible(self.parent, false)
GUI:setOpacity(self.parent, 0)
end
-- 显示地图名称动画
function MapNameDisplay:showMapName(mapName)
if GUI:Win_IsNull(self.parent) then
self:init()
end
-- 设置地图名称
if mapName and mapName ~= "" then
GUI:Text_setString(self.textMapName, mapName)
else
GUI:Text_setString(self.textMapName, "未知地图")
end
-- 居中显示
local screenW = SL:GetMetaValue("SCREEN_WIDTH") or 800
local screenH = SL:GetMetaValue("SCREEN_HEIGHT") or 600
GUI:setPosition(self.textMapName, screenW/2, screenH/2 + 50)
GUI:setPosition(self.bg, screenW/2 - 150, screenH/2 - 25)
-- 显示并开始动画
GUI:setVisible(self.parent, true)
-- 淡入动画
local fadeIn = GUI:ActionFadeTo(0.5, 255)
local delay = GUI:DelayTime(2.0) -- 显示2秒
local fadeOut = GUI:ActionFadeTo(0.5, 0)
-- 动画序列:淡入 -> 延迟 -> 淡出 -> 隐藏
local sequence = GUI:ActionSequence(
fadeIn,
delay,
fadeOut,
GUI:CallFunc(function()
GUI:setVisible(self.parent, false)
end)
)
GUI:runAction(self.parent, sequence)
end
-- 注册地图切换事件
function MapNameDisplay:registerEvents()
SL:RegisterLUAEvent(LUA_EVENT_MAPINFOCHANGE, "MapNameDisplay", function()
-- 获取当前地图名称
local mapName = SL:GetMetaValue("MAP_NAME") or ""
-- 延迟一小段时间显示,确保地图加载完成
SL:ScheduleOnce(function()
MapNameDisplay:showMapName(mapName)
end, 0.5) -- 延迟0.5秒显示
end)
end
-- 初始化并注册事件
function MapNameDisplay:start()
self:init()
self:registerEvents()
end
-- 启动地图名称显示功能
MapNameDisplay:start()
SL:Print("地图名称淡入淡出效果已启动")
```
**代码说明:**
1. **界面创建**:
- 创建了一个透明层作为父节点
- 使用指定的背景图片 `1900000610.png`
- 创建文本控件显示地图名称
2. **动画效果**:
- 使用 `GUI:ActionFadeTo()` 实现透明度变化
- 淡入(0.5秒)-> 停留(2秒)-> 淡出(0.5秒)
- 动画完成后自动隐藏界面
3. **事件监听**:
- 监听 `LUA_EVENT_MAPINFOCHANGE` 地图切换事件
- 从服务端获取当前地图名称 `SL:GetMetaValue("MAP_NAME")`
- 延迟0.5秒显示,确保地图完全加载
4. **居中显示**:
- 根据屏幕尺寸计算居中位置
- 文本显示在屏幕中央偏下位置
**使用注意事项:**
- 地图名称需要服务端通过 `SL:GetMetaValue("MAP_NAME")` 提供
- 背景图片路径可以根据需要替换
- 动画时间参数可以调整:淡入时间、显示时间、淡出时间
- 如果地图切换频繁,可以添加防抖逻辑避免动画重叠
这个效果会在每次地图切换时自动触发,显示当前地图名称并伴有平滑的淡入淡出动画,给玩家清晰的视觉反馈。
← 返回问答库