面板淡入淡出时,里面的item没有这种效果
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-23 20:37:18 |
👁️ 阅读: 9
这是因为你需要在面板上设置级联透明度属性。当父节点透明度变化时,子节点不会自动跟随,需要手动开启。
参考浮生梦老师前端课程内容中的淡入淡出函数,可以看到正确的处理方式:
```lua
-- 淡入效果
function GUI:Node_Action_FadeIn(ui_item, timer, atime, func)
if GUI:Win_IsNull(ui_item) then return end
-- 关键步骤:开启级联透明度
GUI:setChildrenCascadeOpacityEnabled(ui_item, true)
GUI:setOpacity(ui_item, 0)
GUI:setVisible(ui_item, true)
-- 执行淡入动作
local action1 = GUI:ActionFadeIn(atime or 0.5)
local action2 = GUI:CallFunc(function() if func then func() end end)
GUI:runAction(ui_item, GUI:ActionSequence(action1, action2))
end
-- 淡出效果
function GUI:Node_Action_FadeOut(ui_item, timer, atime, func)
if GUI:Win_IsNull(ui_item) then return end
-- 关键步骤:开启级联透明度
GUI:setChildrenCascadeOpacityEnabled(ui_item, true)
local action1 = GUI:ActionFadeOut(atime or 0.5)
local action2 = GUI:CallFunc(function()
GUI:setVisible(ui_item, false)
if func then func() end
end)
GUI:runAction(ui_item, GUI:ActionSequence(action1, action2))
end
```
**核心问题**:你缺少了 `GUI:setChildrenCascadeOpacityEnabled(parent, true)` 这一行代码。
**解决方案**:
1. 在面板淡入淡出前,先调用 `GUI:setChildrenCascadeOpacityEnabled(面板对象, true)`
2. 这样面板透明度变化时,所有子节点(包括item)都会跟随透明度变化
**示例代码**:
```lua
-- 创建面板和item
local panel = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
local item = GUI:Widget_Create(panel, "item1", 50, 50, 100, 100)
-- 淡入前设置级联透明度
GUI:setChildrenCascadeOpacityEnabled(panel, true)
GUI:setOpacity(panel, 0)
GUI:setVisible(panel, true)
-- 执行淡入动画
local fadeInAction = GUI:ActionFadeIn(0.5)
GUI:runAction(panel, fadeInAction)
```
这样面板和里面的item就会一起淡入淡出了!记得下次做透明度动画时,一定要检查级联透明度设置哦~
← 返回问答库