function lib:set_item_box_show(widget, eff_scale, eff_x, eff_y, item_scale, font_Size, font_x, font_y)
local obj = GUI:getChildren(widget)
for _, v in ipairs(obj) do
local zkj = GUI:getChildren(v)
for k, z in ipairs(zkj) do
要在打开界面时有效果,其他时候不生效,需要修改函数的调用方式,而不是修改函数本身。根据浮生梦老师前端课程内容,你应该在界面打开时调用这个函数,并在界面关闭时移除效果或恢复默认状态。
这里是一个修改建议:
```lua
-- 在界面打开时调用
function YourUI:onOpen()
-- 创建界面后调用设置效果
lib:set_item_box_show(widget, eff_scale, eff_x, eff_y, item_scale, font_Size, font_x, font_y)
-- 记录原始状态(如果需要恢复)
self.originalStates = {}
local obj = GUI:getChildren(widget)
for _, v in ipairs(obj) do
local zkj = GUI:getChildren(v)
for k, z in ipairs(zkj) do
if GUI:getName(z) == "Text_xiaohao" then
self.originalStates[z] = {
fontSize = GUI:Text_getFontSize(z),
pos = GUI:getPosition(z)
}
elseif string.find(GUI:getName(z), "item_eff") ~= nil then
self.originalStates[z] = {
scale = GUI:getScale(z),
pos = GUI:getPosition(z)
}
elseif string.find(GUI:getName(z), "item_show") ~= nil then
self.originalStates[z] = {
scale = GUI:getScale(z)
}
end
end
end
end
-- 在界面关闭时恢复
function YourUI:onClose()
if self.originalStates then
for widget, state in pairs(self.originalStates) do
if not GUI:Win_IsNull(widget) then
if state.fontSize then
GUI:Text_setFontSize(widget, state.fontSize)
end
if state.scale then
GUI:setScale(widget, state.scale)
end
if state.pos then
GUI:setPosition(widget, state.pos.x, state.pos.y)
end
end
end
self.originalStates = nil
end
end
```
关键修改点:
1. **只在界面打开时调用**:将 `lib:set_item_box_show()` 放在界面的 `onOpen` 或初始化函数中
2. **使用界面事件**:通过 `SL:RegisterLUAEvent(LUA_EVENT_OPENWIN, ...)` 来触发效果
3. **恢复原始状态**:在界面关闭时恢复控件的原始属性
这样修改后,效果只在界面打开时生效,关闭界面后就会恢复原状。如果你需要更精确的控制,可以考虑使用定时器在特定时间点移除效果。