function ssrUIManager:createTopIcon()
local parent = GUI:Win_FindParent(101)
if parent then
GUI:removeAllChildren(parent)
-- 展开/收起按钮
local top_btn = GUI:Button_Create(parent, "btn_switch", 0, -57, "res/officia
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-21 17:19:58 |
👁️ 阅读: 5
根据浮生梦老师前端课程内容,你的代码需要修改为使用两个不同的按钮来控制展开和收起状态。以下是修改后的代码:
```lua
function ssrUIManager:createTopIcon()
local parent = GUI:Win_FindParent(101)
if parent then
GUI:removeAllChildren(parent)
-- 展开按钮
local expand_btn = GUI:Button_Create(parent, "btn_expand", 0, -57, "res/official/100079.png")
ssrUIManager.expand_btn = expand_btn
-- 收起按钮(初始隐藏)
local collapse_btn = GUI:Button_Create(parent, "btn_collapse", 0, -57, "res/official/100080.png")
GUI:setVisible(collapse_btn, false)
ssrUIManager.collapse_btn = collapse_btn
ssrUIManager.top_layout = parent
-- 展开按钮点击事件
GUI:addOnClickEvent(expand_btn, function()
ssrUIManager:setShowCopyBtn(true)
end)
-- 收起按钮点击事件
GUI:addOnClickEvent(collapse_btn, function()
ssrUIManager:setShowCopyBtn(false)
end)
local count = 0
local row = 0
local itemsPerRow = 6
-- 存储所有创建的按钮,用于动画
local buttonList = {}
for k, val in pairs(top_icon_cfg) do
if val.icon then
local reminValue = -1
local isCreate = true
local key = val.name
-- ... 原有的各种条件判断 ...
if isCreate then
local col = count % itemsPerRow
row = math.floor(count / itemsPerRow)
-- 计算初始位置(展开状态)
local x = (col * -80) + 770
local y = -80 - (row * 80)
-- 创建按钮
local handle = GUI:Button_Create(parent, key, x, y, "res/official/"..val.icon..".png")
GUI:Button_loadTextures(handle, "res/official/"..val.icon..".png")
-- 存储到列表
table.insert(buttonList, {
widget = handle,
targetX = x,
targetY = y,
startX = 0,
startY = 0
})
-- 添加点击事件
GUI:addOnClickEvent(handle, function()
if SL:HasBuff(1100393) then
return SL:ShowSystemTips("您的角色已被封禁!")
end
ssrUIManager:OPEN(val.wnd)
end)
count = count + 1
end
end
end
-- 洗牌动画函数
local function playShuffleAnimation(isExpanding)
for i, btnInfo in ipairs(buttonList) do
GUI:stopAllActions(btnInfo.widget)
if isExpanding then
-- 展开动画
GUI:setPosition(btnInfo.widget, 0, 0)
GUI:setScale(btnInfo.widget, 0.1)
GUI:setOpacity(btnInfo.widget, 0)
local delay = (i - 1) * 0.05
local sequence = GUI:ActionSequence(
GUI:DelayTime(delay),
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, btnInfo.targetX, btnInfo.targetY),
GUI:ActionScaleTo(0.3, 1),
GUI:ActionFadeTo(0.3, 255)
)
)
GUI:runAction(btnInfo.widget, sequence)
else
-- 收起动画
GUI:setOpacity(btnInfo.widget, 255)
local delay = (#buttonList - i) * 0.05
local sequence = GUI:ActionSequence(
GUI:DelayTime(delay),
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, 0, 0),
GUI:ActionScaleTo(0.3, 0.1),
GUI:ActionFadeTo(0.3, 0)
),
GUI:CallFunc(function()
GUI:setVisible(btnInfo.widget, false)
end)
)
GUI:runAction(btnInfo.widget, sequence)
end
end
end
-- 修改setShowCopyBtn函数
function ssrUIManager:setShowCopyBtn(bool)
local function updateButtonVisibility()
if bool then
-- 展开状态:显示收起按钮,隐藏展开按钮
GUI:setVisible(ssrUIManager.expand_btn, false)
GUI:setVisible(ssrUIManager.collapse_btn, true)
else
-- 收起状态:显示展开按钮,隐藏收起按钮
GUI:setVisible(ssrUIManager.expand_btn, true)
GUI:setVisible(ssrUIManager.collapse_btn, false)
end
end
if bool then
-- 执行展开动画
for i, btnInfo in ipairs(buttonList) do
GUI:setVisible(btnInfo.widget, true)
end
playShuffleAnimation(true)
updateButtonVisibility()
ssrUIManager.icon_is_show = true
else
-- 执行收起动画
playShuffleAnimation(false)
SL:ScheduleOnce(function()
updateButtonVisibility()
end, 0.5) -- 延迟0.5秒后更新按钮显示
ssrUIManager.icon_is_show = false
end
end
-- 初始状态:显示展开按钮
ssrUIManager.icon_is_show = false
GUI:setVisible(expand_btn, true)
GUI:setVisible(collapse_btn, false)
end
end
```
**主要修改点:**
1. **两个独立按钮**:
- `expand_btn`:展开按钮(使用100079.png)
- `collapse_btn`:收起按钮(使用100080.png,需要准备这个图片)
2. **按钮状态管理**:
- 展开时:显示收起按钮,隐藏展开按钮
- 收起时:显示展开按钮,隐藏收起按钮
3. **动画同步**:
- 收起动画完成后延迟更新按钮显示状态
- 使用`SL:ScheduleOnce`确保动画完成后再切换按钮
**注意**:你需要准备两个不同的按钮图片资源(100079.png和100080.png),分别代表展开和收起状态。
根据浮生梦老师前端课程内容,你的代码需要修改为使用两个不同的按钮来控制展开和收起状态。以下是修改后的代码:
```lua
function ssrUIManager:createTopIcon()
local parent = GUI:Win_FindParent(101)
if parent then
GUI:removeAllChildren(parent)
-- 展开按钮
local expand_btn = GUI:Button_Create(parent, "btn_expand", 0, -57, "res/official/100079.png")
ssrUIManager.expand_btn = expand_btn
-- 收起按钮(初始隐藏)
local collapse_btn = GUI:Button_Create(parent, "btn_collapse", 0, -57, "res/official/100080.png")
GUI:setVisible(collapse_btn, false)
ssrUIManager.collapse_btn = collapse_btn
ssrUIManager.top_layout = parent
-- 展开按钮点击事件
GUI:addOnClickEvent(expand_btn, function()
ssrUIManager:setShowCopyBtn(true)
end)
-- 收起按钮点击事件
GUI:addOnClickEvent(collapse_btn, function()
ssrUIManager:setShowCopyBtn(false)
end)
local count = 0
local row = 0
local itemsPerRow = 6
-- 存储所有创建的按钮,用于动画
local buttonList = {}
for k, val in pairs(top_icon_cfg) do
if val.icon then
local reminValue = -1
local isCreate = true
local key = val.name
-- ... 原有的各种条件判断 ...
if isCreate then
local col = count % itemsPerRow
row = math.floor(count / itemsPerRow)
-- 计算初始位置(展开状态)
local x = (col * -80) + 770
local y = -80 - (row * 80)
-- 创建按钮
local handle = GUI:Button_Create(parent, key, x, y, "res/official/"..val.icon..".png")
GUI:Button_loadTextures(handle, "res/official/"..val.icon..".png")
-- 存储到列表
table.insert(buttonList, {
widget = handle,
targetX = x,
targetY = y,
startX = 0,
startY = 0
})
-- 添加点击事件
GUI:addOnClickEvent(handle, function()
if SL:HasBuff(1100393) then
return SL:ShowSystemTips("您的角色已被封禁!")
end
ssrUIManager:OPEN(val.wnd)
end)
count = count + 1
end
end
end
-- 洗牌动画函数
local function playShuffleAnimation(isExpanding)
for i, btnInfo in ipairs(buttonList) do
GUI:stopAllActions(btnInfo.widget)
if isExpanding then
-- 展开动画
GUI:setPosition(btnInfo.widget, 0, 0)
GUI:setScale(btnInfo.widget, 0.1)
GUI:setOpacity(btnInfo.widget, 0)
local delay = (i - 1) * 0.05
local sequence = GUI:ActionSequence(
GUI:DelayTime(delay),
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, btnInfo.targetX, btnInfo.targetY),
GUI:ActionScaleTo(0.3, 1),
GUI:ActionFadeTo(0.3, 255)
)
)
GUI:runAction(btnInfo.widget, sequence)
else
-- 收起动画
GUI:setOpacity(btnInfo.widget, 255)
local delay = (#buttonList - i) * 0.05
local sequence = GUI:ActionSequence(
GUI:DelayTime(delay),
GUI:ActionSpawn(
GUI:ActionMoveTo(0.3, 0, 0),
GUI:ActionScaleTo(0.3, 0.1),
GUI:ActionFadeTo(0.3, 0)
),
GUI:CallFunc(function()
GUI:setVisible(btnInfo.widget, false)
end)
)
GUI:runAction(btnInfo.widget, sequence)
end
end
end
-- 修改setShowCopyBtn函数
function ssrUIManager:setShowCopyBtn(bool)
local function updateButtonVisibility()
if bool then
-- 展开状态:显示收起按钮,隐藏展开按钮
GUI:setVisible(ssrUIManager.expand_btn, false)
GUI:setVisible(ssrUIManager.collapse_btn, true)
else
-- 收起状态:显示展开按钮,隐藏收起按钮
GUI:setVisible(ssrUIManager.expand_btn, true)
GUI:setVisible(ssrUIManager.collapse_btn, false)
end
end
if bool then
-- 执行展开动画
for i, btnInfo in ipairs(buttonList) do
GUI:setVisible(btnInfo.widget, true)
end
playShuffleAnimation(true)
updateButtonVisibility()
ssrUIManager.icon_is_show = true
else
-- 执行收起动画
playShuffleAnimation(false)
SL:ScheduleOnce(function()
updateButtonVisibility()
end, 0.5) -- 延迟0.5秒后更新按钮显示
ssrUIManager.icon_is_show = false
end
end
-- 初始状态:显示展开按钮
ssrUIManager.icon_is_show = false
GUI:setVisible(expand_btn, true)
GUI:setVisible(collapse_btn, false)
end
end
```
**主要修改点:**
1. **两个独立按钮**:
- `expand_btn`:展开按钮(使用100079.png)
- `collapse_btn`:收起按钮(使用100080.png,需要准备这个图片)
2. **按钮状态管理**:
- 展开时:显示收起按钮,隐藏展开按钮
- 收起时:显示展开按钮,隐藏收起按钮
3. **动画同步**:
- 收起动画完成后延迟更新按钮显示状态
- 使用`SL:ScheduleOnce`确保动画完成后再切换按钮
**注意**:你需要准备两个不同的按钮图片资源(100079.png和100080.png),分别代表展开和收起状态。
← 返回问答库