function PlayerEquip.ShowDestiny()
-- 展开天命界面
local ID = SL:GetMetaValue("MAIN_ACTOR_ID")
local Lv = SL:GetMetaValue("ACTOR_LEVEL", ID)
local rLv = SL:GetMetaValue("RELEVEL")
GUI:addOnClickEvent(PlayerEquip._ui.destiny_btn, functio
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-19 06:19:27 |
👁️ 阅读: 4
根据浮生梦老师前端课程内容,你的代码需要修改以实现点击按钮时显示对应的Layout。主要问题是每次点击都创建新的Layout,而不是控制已创建的Layout的显示状态。
**修改后的代码:**
```lua
function PlayerEquip.ShowDestiny()
-- 展开天命界面
local ID = SL:GetMetaValue("MAIN_ACTOR_ID")
local Lv = SL:GetMetaValue("ACTOR_LEVEL", ID)
local rLv = SL:GetMetaValue("RELEVEL")
-- 存储每个按钮对应的Layout
PlayerEquip.destinyLayouts = PlayerEquip.destinyLayouts or {}
GUI:addOnClickEvent(PlayerEquip._ui.destiny_btn, function()
-- 切换天命界面的显示状态
local destiny_bg = PlayerEquip._ui.destiny_bg
local isVisible = GUI:getVisible(destiny_bg)
if GUI:Win_IsNull(destiny_bg) then
return
end
-- 切换可见性
GUI:setVisible(destiny_bg, not isVisible)
-- 淡入淡出效果
if not isVisible then
GUI:setOpacity(destiny_bg, 0)
GUI:runAction(destiny_bg, GUI:ActionFadeTo(0.2, 255))
end
end)
for k, v in ipairs(PlayerEquip.destiny_config) do
local btn = GUI:getChildByName(PlayerEquip._ui.destiny_list, "btn_"..k)
local imageName = "destiny_img"..k
if Lv < v.level or rLv < v.rlv then
GUI:Button_setBright(btn, false)
end
if Lv >= v.level and rLv >= v.rlv then
GUI:Button_setBright(btn, true)
GUI:addOnClickEvent(btn, function()
-- 检查是否已创建该Layout
local layoutKey = "destiny_layout_"..k
local layout = PlayerEquip.destinyLayouts[layoutKey]
if GUI:Win_IsNull(layout) then
-- 首次点击,创建Layout
local width, height = SL:GetMetaValue("SCREEN_WIDTH"), SL:GetMetaValue("SCREEN_HEIGHT")
layout = GUI:Layout_Create(PlayerEquip._ui.Node_1, layoutKey, -654, -243, width, height, true)
GUI:Layout_setBackGroundColorType(layout, 1)
GUI:Layout_setBackGroundColor(layout, "#000000")
GUI:Layout_setBackGroundColorOpacity(layout, 200)
GUI:setLocalZOrder(layout, 100)
GUI:setTouchEnabled(layout, true)
GUI:setMouseEnabled(layout, true)
local img = GUI:Image_Create(layout, imageName, 100, 100, "res/private/player_main_layer_ui/player_main_layer_ui_win32/1900015001_1.jpg")
local text = GUI:Text_Create(layout, "text_1", 150, 100, 18, "#f000ff", "4545153")
local btn_hold = GUI:Button_Create(layout, "btnhold", 300, 100, "res/public_win32/anniu11_2.png")
GUI:Button_setTitleText(btn_hold, "暂时挂起")
GUI:Button_setTitleColor(btn_hold, "#ff0000")
GUI:Button_setTitleFontSize(btn_hold, 18)
GUI:addOnClickEvent(btn_hold, function()
GUI:setVisible(layout, false)
end)
-- 存储到表中
PlayerEquip.destinyLayouts[layoutKey] = layout
end
-- 切换显示状态
local isVisible = GUI:getVisible(layout)
GUI:setVisible(layout, not isVisible)
-- 如果显示,添加淡入效果
if not isVisible then
GUI:setOpacity(layout, 0)
GUI:runAction(layout, GUI:ActionFadeTo(0.2, 255))
end
end)
end
end
end
```
**关键修改说明:**
1. **添加存储表**:`PlayerEquip.destinyLayouts` 用于存储每个按钮对应的Layout对象
2. **检查已存在Layout**:点击按钮时先检查是否已创建该Layout,避免重复创建
3. **切换显示状态**:使用 `GUI:getVisible(layout)` 获取当前状态,然后使用 `GUI:setVisible(layout, not isVisible)` 切换显示
4. **淡入效果**:当显示Layout时添加淡入动画
5. **Layout唯一标识**:使用 `"destiny_layout_"..k` 作为Layout的key,确保每个按钮对应唯一的Layout
**函数说明:**
- `GUI:Win_IsNull(widget)` - 检查控件是否为空
- `GUI:getVisible(widget)` - 获取控件可见性
- `GUI:setVisible(widget, value)` - 设置控件可见性
- `GUI:setOpacity(widget, value)` - 设置控件不透明度
- `GUI:ActionFadeTo(time, opacity)` - 创建淡入淡出动作
这样修改后,点击按钮会显示对应的Layout,再次点击会隐藏,只显示对应的Layout而不重复创建。
根据浮生梦老师前端课程内容,你的代码需要修改以实现点击按钮时显示对应的Layout。主要问题是每次点击都创建新的Layout,而不是控制已创建的Layout的显示状态。
**修改后的代码:**
```lua
function PlayerEquip.ShowDestiny()
-- 展开天命界面
local ID = SL:GetMetaValue("MAIN_ACTOR_ID")
local Lv = SL:GetMetaValue("ACTOR_LEVEL", ID)
local rLv = SL:GetMetaValue("RELEVEL")
-- 存储每个按钮对应的Layout
PlayerEquip.destinyLayouts = PlayerEquip.destinyLayouts or {}
GUI:addOnClickEvent(PlayerEquip._ui.destiny_btn, function()
-- 切换天命界面的显示状态
local destiny_bg = PlayerEquip._ui.destiny_bg
local isVisible = GUI:getVisible(destiny_bg)
if GUI:Win_IsNull(destiny_bg) then
return
end
-- 切换可见性
GUI:setVisible(destiny_bg, not isVisible)
-- 淡入淡出效果
if not isVisible then
GUI:setOpacity(destiny_bg, 0)
GUI:runAction(destiny_bg, GUI:ActionFadeTo(0.2, 255))
end
end)
for k, v in ipairs(PlayerEquip.destiny_config) do
local btn = GUI:getChildByName(PlayerEquip._ui.destiny_list, "btn_"..k)
local imageName = "destiny_img"..k
if Lv < v.level or rLv < v.rlv then
GUI:Button_setBright(btn, false)
end
if Lv >= v.level and rLv >= v.rlv then
GUI:Button_setBright(btn, true)
GUI:addOnClickEvent(btn, function()
-- 检查是否已创建该Layout
local layoutKey = "destiny_layout_"..k
local layout = PlayerEquip.destinyLayouts[layoutKey]
if GUI:Win_IsNull(layout) then
-- 首次点击,创建Layout
local width, height = SL:GetMetaValue("SCREEN_WIDTH"), SL:GetMetaValue("SCREEN_HEIGHT")
layout = GUI:Layout_Create(PlayerEquip._ui.Node_1, layoutKey, -654, -243, width, height, true)
GUI:Layout_setBackGroundColorType(layout, 1)
GUI:Layout_setBackGroundColor(layout, "#000000")
GUI:Layout_setBackGroundColorOpacity(layout, 200)
GUI:setLocalZOrder(layout, 100)
GUI:setTouchEnabled(layout, true)
GUI:setMouseEnabled(layout, true)
local img = GUI:Image_Create(layout, imageName, 100, 100, "res/private/player_main_layer_ui/player_main_layer_ui_win32/1900015001_1.jpg")
local text = GUI:Text_Create(layout, "text_1", 150, 100, 18, "#f000ff", "4545153")
local btn_hold = GUI:Button_Create(layout, "btnhold", 300, 100, "res/public_win32/anniu11_2.png")
GUI:Button_setTitleText(btn_hold, "暂时挂起")
GUI:Button_setTitleColor(btn_hold, "#ff0000")
GUI:Button_setTitleFontSize(btn_hold, 18)
GUI:addOnClickEvent(btn_hold, function()
GUI:setVisible(layout, false)
end)
-- 存储到表中
PlayerEquip.destinyLayouts[layoutKey] = layout
end
-- 切换显示状态
local isVisible = GUI:getVisible(layout)
GUI:setVisible(layout, not isVisible)
-- 如果显示,添加淡入效果
if not isVisible then
GUI:setOpacity(layout, 0)
GUI:runAction(layout, GUI:ActionFadeTo(0.2, 255))
end
end)
end
end
end
```
**关键修改说明:**
1. **添加存储表**:`PlayerEquip.destinyLayouts` 用于存储每个按钮对应的Layout对象
2. **检查已存在Layout**:点击按钮时先检查是否已创建该Layout,避免重复创建
3. **切换显示状态**:使用 `GUI:getVisible(layout)` 获取当前状态,然后使用 `GUI:setVisible(layout, not isVisible)` 切换显示
4. **淡入效果**:当显示Layout时添加淡入动画
5. **Layout唯一标识**:使用 `"destiny_layout_"..k` 作为Layout的key,确保每个按钮对应唯一的Layout
**函数说明:**
- `GUI:Win_IsNull(widget)` - 检查控件是否为空
- `GUI:getVisible(widget)` - 获取控件可见性
- `GUI:setVisible(widget, value)` - 设置控件可见性
- `GUI:setOpacity(widget, value)` - 设置控件不透明度
- `GUI:ActionFadeTo(time, opacity)` - 创建淡入淡出动作
这样修改后,点击按钮会显示对应的Layout,再次点击会隐藏,只显示对应的Layout而不重复创建。
← 返回问答库