用996引擎前端lua编写一个人物切换地图淡入淡出效果显示当前地图名字,具体效果是:文字效果为白色,字体大小为40px,文字需要上下左右自适应居中,不需要图片背景
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-01 17:01:10 |
👁️ 阅读: 20
根据996引擎前端课程内容,我来帮你实现地图切换时的淡入淡出文字效果。
```lua
-- 创建地图名称显示模块
MapNameDisplay = {}
function MapNameDisplay:create()
-- 获取屏幕尺寸
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建父节点(使用主界面附着点)
local parent = GUI:Attach_MainMiniMap() -- 或者使用其他合适的附着点
-- 创建文字控件
local textLabel = GUI:Text_Create(parent, "MapName_Display", 0, 0, 40, "#ffffff", "")
-- 设置字体样式(如果需要自定义字体)
-- GUI:Text_setFontName(textLabel, "fonts/font5.ttf")
-- 设置文字居中
GUI:setAnchorPoint(textLabel, 0.5, 0.5)
GUI:setPosition(textLabel, screenW/2, screenH/2)
-- 初始设置为透明
GUI:setOpacity(textLabel, 0)
-- 存储引用
MapNameDisplay._textLabel = textLabel
-- 注册地图切换事件
SL:RegisterLUAEvent(LUA_EVENT_MAPINFOCHANGE, "MapNameDisplay", MapNameDisplay.onMapChange)
end
function MapNameDisplay.onMapChange()
-- 获取当前地图名称
local mapName = SL:GetMetaValue("MAP_NAME") or ""
if GUI:Win_IsNull(MapNameDisplay._textLabel) then
return
end
-- 更新文字内容
GUI:Text_setString(MapNameDisplay._textLabel, mapName)
-- 淡入淡出动画序列
local fadeIn = GUI:ActionFadeTo(0.5, 255) -- 0.5秒淡入到完全不透明
local delay = GUI:DelayTime(1.5) -- 保持1.5秒
local fadeOut = GUI:ActionFadeTo(0.5, 0) -- 0.5秒淡出到透明
-- 创建动作序列
local sequence = GUI:ActionSequence(fadeIn, delay, fadeOut)
-- 执行动画
GUI:runAction(MapNameDisplay._textLabel, sequence)
end
-- 初始化
function MapNameDisplay.main()
MapNameDisplay:create()
end
-- 调用初始化
MapNameDisplay.main()
```
**关键点说明:**
1. **文字创建**:使用`GUI:Text_Create()`创建白色40px文字
2. **居中设置**:
- `GUI:setAnchorPoint(textLabel, 0.5, 0.5)` 设置锚点为中心
- `GUI:setPosition(textLabel, screenW/2, screenH/2)` 设置到屏幕中心
3. **淡入淡出效果**:
- `GUI:ActionFadeTo(time, opacity)` 控制透明度变化
- `GUI:ActionSequence()` 组合多个动作顺序执行
- `GUI:DelayTime()` 添加延迟
4. **事件监听**:使用`SL:RegisterLUAEvent(LUA_EVENT_MAPINFOCHANGE)`监听地图切换事件
**使用方式:**
- 将这段代码放在合适的位置(如界面初始化时)
- 每次切换地图会自动触发文字显示
- 文字会自动居中显示并执行淡入淡出动画
注意:如果地图名称获取不到,可以检查`SL:GetMetaValue("MAP_NAME")`是否正确配置,或者使用其他地图信息接口。
← 返回问答库