local MainTop = {}
SL:Print("=========MainTop加载成功!")
-- 顶部按钮配置数据(示例)
local Topui = {
{ name = "id1", x = 0.64, y = -30, res = "res/custom/tops/1.png", cmd = {1234, 5011} }, -- 首冲
{ name = "id2", x = 0.57, y = -30, res = "res/custom/tops/2.
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-12 16:03:52 |
👁️ 阅读: 14
```lua
local MainTop = {}
SL:Print("=========MainTop加载成功!")
-- 顶部按钮配置数据(示例)
local Topui = {
{ name = "id1", x = 0.64, y = -30, res = "res/custom/tops/1.png", cmd = {1234, 5011} }, -- 首冲
{ name = "id2", x = 0.57, y = -30, res = "res/custom/tops/2.png", cmd = {1234, 5012} }, -- VIP特权
{ name = "id3", x = 0.50, y = -30, res = "res/custom/tops/3.png", cmd = {1234, 5013} }, -- 福利礼包
{ name = "id4", x = 0.43, y = -30, res = "res/custom/tops/4.png", cmd = {1234, 5014} }, -- 开服活动
{ name = "id5", x = 0.36, y = -30, res = "res/custom/tops/5.png", cmd = {1234, 5015} }, -- 交易行
{ name = "id6", x = 0.29, y = -30, res = "res/custom/tops/6.png", cmd = {1234, 5016} }, -- 福利活动
{ name = "id7", x = 0.22, y = -30, res = "res/custom/tops/7.png", cmd = {1234, 5017} }, -- 充值
}
-- 新增:洗牌特效函数(使用Timeline动画)
function MainTop.shuffleEffect(widget)
if GUI:Win_IsNull(widget) then return end
-- 先设置可见和透明度
GUI:setVisible(widget, true)
GUI:setOpacity(widget, 0)
-- 使用Timeline淡入效果
GUI:Timeline_FadeIn(widget, 0.3, function()
-- 淡入完成后执行缩放动画
GUI:Timeline_ScaleTo(widget, 100, 0.2, function()
SL:Print("洗牌特效完成")
end)
end)
end
-- 新增:收起特效函数(使用Timeline动画)
function MainTop.collapseEffect(widget)
if GUI:Win_IsNull(widget) then return end
-- 先缩小再淡出
GUI:Timeline_ScaleTo(widget, 0, 0.2, function()
GUI:Timeline_FadeOut(widget, 0.3, function()
GUI:setVisible(widget, false)
SL:Print("收起特效完成")
end)
end)
end
function MainTop.main()
-- 获取屏幕宽高
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建界面
local topwin = GUI:Win_Create("NPC_Window", screenW*0.99, screenH)
if not topwin then
SL:Print("创建主窗口失败")
return
end
-- 设置折叠按钮位置
GUI:removeChildByName(topwin, "id8")
local zhedie = GUI:Button_Create(topwin, "id8", -0.2 * screenW, -85, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
-- 获取折叠按钮位置作为缩放中心点
local foldPos = GUI:getPosition(zhedie)
-- 创建容器节点
local topui = GUI:Node_Create(topwin, "topui", 1, 1)
-- 遍历配置创建按钮
for _, v in ipairs(Topui) do
-- 删除同名子节点
GUI:removeChildByName(topui, v.name)
-- 创建按钮(保持原有位置计算)
local btn = GUI:Button_Create(topui, v.name, - v.x * screenW, v.y, v.res)
GUI:setAnchorPoint(btn, 1, 1)
-- 绑定点击事件
GUI:addOnClickEvent(btn, function()
SL:Print("按钮被点击:", v.name)
end)
end
-- 修改容器节点的锚点,使其以折叠按钮位置为中心缩放
-- 重新设置容器位置到折叠按钮处
GUI:setPosition(topui, foldPos.x, foldPos.y)
-- 折叠按钮点击事件
GUI:addOnClickEvent(zhedie, function()
local isExpanded = (GUI:getTag(zhedie) == 1)
if isExpanded then
-- 收起时使用新的收起特效
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/9.png")
GUI:setTag(zhedie, 0)
MainTop.collapseEffect(topui) -- 改为使用新的收起特效
else
-- 展开时使用洗牌特效
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
MainTop.shuffleEffect(topui) -- 改为使用洗牌特效
end
end)
-- 延迟执行展开动画
SL:ScheduleOnce(function()
MainTop.shuffleEffect(topui) -- 改为使用洗牌特效
end, 0.5)
SL:Print('主界面创建完成')
end
-- 展开特效函数(保留原有函数,但主逻辑改用新特效)
function MainTop.showWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
GUI:setVisible(widget, true)
GUI:setOpacity(widget, 0)
local fadeIn = GUI:ActionFadeTo(0.3, 255)
local scaleTo = GUI:ActionScaleTo(0.3, 100) -- 注意:ScaleTo参数是百分比,1=100%
local seq = GUI:ActionSequence(fadeIn, scaleTo)
GUI:runAction(widget, seq)
end
-- 收起特效函数(保留原有函数,但主逻辑改用新特效)
function MainTop.hideWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
local fadeOut = GUI:ActionFadeTo(0.3, 0)
local scaleTo = GUI:ActionScaleTo(0.3, 0)
local callback = GUI:CallFunc(function()
GUI:setVisible(widget, false)
GUI:setScale(widget, 0)
end)
local seq = GUI:ActionSequence(fadeOut, scaleTo, callback)
GUI:runAction(widget, seq)
end
-- 启动模块
MainTop.main()
return MainTop
```
**主要修改说明:**
1. **新增洗牌特效函数** `MainTop.shuffleEffect(widget)`:
- 使用 `GUI:Timeline_FadeIn()` 实现淡入效果
- 淡入完成后使用 `GUI:Timeline_ScaleTo()` 实现缩放动画
- 参数说明:
- `widget`: 控件对象
- `0.3`: 淡入时间(秒)
- `100`: 缩放比例(100% = 原始大小)
2. **新增收起特效函数** `MainTop.collapseEffect(widget)`:
- 使用 `GUI:Timeline_ScaleTo()` 先缩小到0
- 然后使用 `GUI:Timeline_FadeOut()` 淡出
- 最后设置控件不可见
3. **修改主逻辑**:
- 展开时调用 `MainTop.shuffleEffect(topui)`
- 收起时调用 `MainTop.collapseEffect(topui)`
- 初始延迟动画也改为洗牌特效
4. **注意事项**:
- `GUI:Timeline_ScaleTo()` 的第二个参数是百分比,100表示原始大小
- 所有特效都包含回调函数,可以在动画完成后执行额外操作
- 保留了原有的 `showWithEffect` 和 `hideWithEffect` 函数作为备选
**函数参数说明:**
- `GUI:Timeline_FadeIn(widget, time, callback)`: 淡入动画
- `GUI:Timeline_FadeOut(widget, time, callback)`: 淡出动画
- `GUI:Timeline_ScaleTo(widget, value, time, callback)`: 缩放动画
- `value`: 缩放比例(0-100,100=原始大小)
这样你的顶部菜单就有了更流畅的淡入淡出和洗牌特效效果!
```lua
local MainTop = {}
SL:Print("=========MainTop加载成功!")
-- 顶部按钮配置数据(示例)
local Topui = {
{ name = "id1", x = 0.64, y = -30, res = "res/custom/tops/1.png", cmd = {1234, 5011} }, -- 首冲
{ name = "id2", x = 0.57, y = -30, res = "res/custom/tops/2.png", cmd = {1234, 5012} }, -- VIP特权
{ name = "id3", x = 0.50, y = -30, res = "res/custom/tops/3.png", cmd = {1234, 5013} }, -- 福利礼包
{ name = "id4", x = 0.43, y = -30, res = "res/custom/tops/4.png", cmd = {1234, 5014} }, -- 开服活动
{ name = "id5", x = 0.36, y = -30, res = "res/custom/tops/5.png", cmd = {1234, 5015} }, -- 交易行
{ name = "id6", x = 0.29, y = -30, res = "res/custom/tops/6.png", cmd = {1234, 5016} }, -- 福利活动
{ name = "id7", x = 0.22, y = -30, res = "res/custom/tops/7.png", cmd = {1234, 5017} }, -- 充值
}
-- 新增:洗牌特效函数(使用Timeline动画)
function MainTop.shuffleEffect(widget)
if GUI:Win_IsNull(widget) then return end
-- 先设置可见和透明度
GUI:setVisible(widget, true)
GUI:setOpacity(widget, 0)
-- 使用Timeline淡入效果
GUI:Timeline_FadeIn(widget, 0.3, function()
-- 淡入完成后执行缩放动画
GUI:Timeline_ScaleTo(widget, 100, 0.2, function()
SL:Print("洗牌特效完成")
end)
end)
end
-- 新增:收起特效函数(使用Timeline动画)
function MainTop.collapseEffect(widget)
if GUI:Win_IsNull(widget) then return end
-- 先缩小再淡出
GUI:Timeline_ScaleTo(widget, 0, 0.2, function()
GUI:Timeline_FadeOut(widget, 0.3, function()
GUI:setVisible(widget, false)
SL:Print("收起特效完成")
end)
end)
end
function MainTop.main()
-- 获取屏幕宽高
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建界面
local topwin = GUI:Win_Create("NPC_Window", screenW*0.99, screenH)
if not topwin then
SL:Print("创建主窗口失败")
return
end
-- 设置折叠按钮位置
GUI:removeChildByName(topwin, "id8")
local zhedie = GUI:Button_Create(topwin, "id8", -0.2 * screenW, -85, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
-- 获取折叠按钮位置作为缩放中心点
local foldPos = GUI:getPosition(zhedie)
-- 创建容器节点
local topui = GUI:Node_Create(topwin, "topui", 1, 1)
-- 遍历配置创建按钮
for _, v in ipairs(Topui) do
-- 删除同名子节点
GUI:removeChildByName(topui, v.name)
-- 创建按钮(保持原有位置计算)
local btn = GUI:Button_Create(topui, v.name, - v.x * screenW, v.y, v.res)
GUI:setAnchorPoint(btn, 1, 1)
-- 绑定点击事件
GUI:addOnClickEvent(btn, function()
SL:Print("按钮被点击:", v.name)
end)
end
-- 修改容器节点的锚点,使其以折叠按钮位置为中心缩放
-- 重新设置容器位置到折叠按钮处
GUI:setPosition(topui, foldPos.x, foldPos.y)
-- 折叠按钮点击事件
GUI:addOnClickEvent(zhedie, function()
local isExpanded = (GUI:getTag(zhedie) == 1)
if isExpanded then
-- 收起时使用新的收起特效
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/9.png")
GUI:setTag(zhedie, 0)
MainTop.collapseEffect(topui) -- 改为使用新的收起特效
else
-- 展开时使用洗牌特效
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
MainTop.shuffleEffect(topui) -- 改为使用洗牌特效
end
end)
-- 延迟执行展开动画
SL:ScheduleOnce(function()
MainTop.shuffleEffect(topui) -- 改为使用洗牌特效
end, 0.5)
SL:Print('主界面创建完成')
end
-- 展开特效函数(保留原有函数,但主逻辑改用新特效)
function MainTop.showWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
GUI:setVisible(widget, true)
GUI:setOpacity(widget, 0)
local fadeIn = GUI:ActionFadeTo(0.3, 255)
local scaleTo = GUI:ActionScaleTo(0.3, 100) -- 注意:ScaleTo参数是百分比,1=100%
local seq = GUI:ActionSequence(fadeIn, scaleTo)
GUI:runAction(widget, seq)
end
-- 收起特效函数(保留原有函数,但主逻辑改用新特效)
function MainTop.hideWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
local fadeOut = GUI:ActionFadeTo(0.3, 0)
local scaleTo = GUI:ActionScaleTo(0.3, 0)
local callback = GUI:CallFunc(function()
GUI:setVisible(widget, false)
GUI:setScale(widget, 0)
end)
local seq = GUI:ActionSequence(fadeOut, scaleTo, callback)
GUI:runAction(widget, seq)
end
-- 启动模块
MainTop.main()
return MainTop
```
**主要修改说明:**
1. **新增洗牌特效函数** `MainTop.shuffleEffect(widget)`:
- 使用 `GUI:Timeline_FadeIn()` 实现淡入效果
- 淡入完成后使用 `GUI:Timeline_ScaleTo()` 实现缩放动画
- 参数说明:
- `widget`: 控件对象
- `0.3`: 淡入时间(秒)
- `100`: 缩放比例(100% = 原始大小)
2. **新增收起特效函数** `MainTop.collapseEffect(widget)`:
- 使用 `GUI:Timeline_ScaleTo()` 先缩小到0
- 然后使用 `GUI:Timeline_FadeOut()` 淡出
- 最后设置控件不可见
3. **修改主逻辑**:
- 展开时调用 `MainTop.shuffleEffect(topui)`
- 收起时调用 `MainTop.collapseEffect(topui)`
- 初始延迟动画也改为洗牌特效
4. **注意事项**:
- `GUI:Timeline_ScaleTo()` 的第二个参数是百分比,100表示原始大小
- 所有特效都包含回调函数,可以在动画完成后执行额外操作
- 保留了原有的 `showWithEffect` 和 `hideWithEffect` 函数作为备选
**函数参数说明:**
- `GUI:Timeline_FadeIn(widget, time, callback)`: 淡入动画
- `GUI:Timeline_FadeOut(widget, time, callback)`: 淡出动画
- `GUI:Timeline_ScaleTo(widget, value, time, callback)`: 缩放动画
- `value`: 缩放比例(0-100,100=原始大小)
这样你的顶部菜单就有了更流畅的淡入淡出和洗牌特效效果!
← 返回问答库