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 15:22:12 |
👁️ 阅读: 8
看了你的代码,主要问题在于创建时不应该执行展开动画,但你的`MainTop.main()`函数末尾有`SL:ScheduleOnce`调用了展开。同时,根据浮生梦老师前端课程内容,有几个函数使用需要调整。
**主要修改点:**
1. **移除自动展开**:删除`MainTop.main()`末尾的`SL:ScheduleOnce`延迟调用。
2. **动作序列修正**:`GUI:ActionFadeTo`和`GUI:ActionScaleTo`的参数顺序需要调整,并且应该使用`GUI:ActionSequence`来组合。
3. **初始状态设置**:确保容器初始为收起状态(透明度0,缩放0,不可见)。
**修改后的代码:**
```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} }, -- 充值
}
function MainTop.main()
-- 获取屏幕宽高
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建界面
local topwin = GUI:Win_Create("NPC_Window", screenW, 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)
-- 创建容器节点,初始不可见且缩放为0
local topui = GUI:Node_Create(topwin, "topui", 1, 1)
GUI:setVisible(topui, false)
GUI:setScale(topui, 0)
GUI:setOpacity(topui, 0) -- 初始透明度也设为0
-- 遍历配置创建按钮
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:setAnchorPoint(topui, 0.5, 0.5)
-- 重新设置容器位置到折叠按钮处
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.hideWithEffect(topui)
else
-- 展开
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
MainTop.showWithEffect(topui)
end
end)
-- 【关键修改】删除这里的延迟展开,让界面初始为收起状态
-- SL:ScheduleOnce(function()
-- MainTop.showWithEffect(topui)
-- end, 0.5)
SL:Print('主界面创建完成,初始为收起状态')
end
-- 展开特效函数
function MainTop.showWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
GUI:setVisible(widget, true)
-- 【动作参数修正】ActionFadeTo(time, opacity), ActionScaleTo(time, scale)
local fadeIn = GUI:ActionFadeTo(0.3, 255) -- 淡入到不透明
local scaleTo = GUI:ActionScaleTo(0.3, 1) -- 缩放到原始大小
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) -- 缩小到0
local callback = GUI:CallFunc(function()
GUI:setVisible(widget, false)
end)
local seq = GUI:ActionSequence(fadeOut, scaleTo, callback)
GUI:runAction(widget, seq)
end
-- 启动模块
MainTop.main()
return MainTop
```
**修改说明:**
1. **删除了`SL:ScheduleOnce`**:这样界面创建后就不会自动展开。
2. **修正了动作函数参数**:`GUI:ActionFadeTo(0.3, 255)`和`GUI:ActionScaleTo(0.3, 1)`,时间在前,目标值在后。
3. **强化了初始状态**:在创建容器`topui`后,明确设置了`GUI:setOpacity(topui, 0)`,确保初始透明度为0。
4. **优化了收起回调**:在`hideWithEffect`的回调中,只需要设置不可见,因为缩放已经在动作中完成了。
现在你的顶部按钮栏在创建时会保持收起状态,只有点击折叠按钮才会触发展开/收起动画,符合你的需求。如果还有不明白的地方,随时可以问我!
看了你的代码,主要问题在于创建时不应该执行展开动画,但你的`MainTop.main()`函数末尾有`SL:ScheduleOnce`调用了展开。同时,根据浮生梦老师前端课程内容,有几个函数使用需要调整。
**主要修改点:**
1. **移除自动展开**:删除`MainTop.main()`末尾的`SL:ScheduleOnce`延迟调用。
2. **动作序列修正**:`GUI:ActionFadeTo`和`GUI:ActionScaleTo`的参数顺序需要调整,并且应该使用`GUI:ActionSequence`来组合。
3. **初始状态设置**:确保容器初始为收起状态(透明度0,缩放0,不可见)。
**修改后的代码:**
```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} }, -- 充值
}
function MainTop.main()
-- 获取屏幕宽高
local screenW = SL:GetMetaValue("SCREEN_WIDTH")
local screenH = SL:GetMetaValue("SCREEN_HEIGHT")
-- 创建界面
local topwin = GUI:Win_Create("NPC_Window", screenW, 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)
-- 创建容器节点,初始不可见且缩放为0
local topui = GUI:Node_Create(topwin, "topui", 1, 1)
GUI:setVisible(topui, false)
GUI:setScale(topui, 0)
GUI:setOpacity(topui, 0) -- 初始透明度也设为0
-- 遍历配置创建按钮
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:setAnchorPoint(topui, 0.5, 0.5)
-- 重新设置容器位置到折叠按钮处
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.hideWithEffect(topui)
else
-- 展开
GUI:Button_loadTextureNormal(zhedie, "res/custom/tops/8.png")
GUI:setTag(zhedie, 1)
MainTop.showWithEffect(topui)
end
end)
-- 【关键修改】删除这里的延迟展开,让界面初始为收起状态
-- SL:ScheduleOnce(function()
-- MainTop.showWithEffect(topui)
-- end, 0.5)
SL:Print('主界面创建完成,初始为收起状态')
end
-- 展开特效函数
function MainTop.showWithEffect(widget)
if GUI:Win_IsNull(widget) then return end
GUI:setVisible(widget, true)
-- 【动作参数修正】ActionFadeTo(time, opacity), ActionScaleTo(time, scale)
local fadeIn = GUI:ActionFadeTo(0.3, 255) -- 淡入到不透明
local scaleTo = GUI:ActionScaleTo(0.3, 1) -- 缩放到原始大小
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) -- 缩小到0
local callback = GUI:CallFunc(function()
GUI:setVisible(widget, false)
end)
local seq = GUI:ActionSequence(fadeOut, scaleTo, callback)
GUI:runAction(widget, seq)
end
-- 启动模块
MainTop.main()
return MainTop
```
**修改说明:**
1. **删除了`SL:ScheduleOnce`**:这样界面创建后就不会自动展开。
2. **修正了动作函数参数**:`GUI:ActionFadeTo(0.3, 255)`和`GUI:ActionScaleTo(0.3, 1)`,时间在前,目标值在后。
3. **强化了初始状态**:在创建容器`topui`后,明确设置了`GUI:setOpacity(topui, 0)`,确保初始透明度为0。
4. **优化了收起回调**:在`hideWithEffect`的回调中,只需要设置不可见,因为缩放已经在动作中完成了。
现在你的顶部按钮栏在创建时会保持收起状态,只有点击折叠按钮才会触发展开/收起动画,符合你的需求。如果还有不明白的地方,随时可以问我!
← 返回问答库