local xulie = 0
for k , v in pairs(d) do
if string.find(itemData.Name,k) then
xulie = v
local ext = {
count = 20,
speed = 100,
loop = -1,
finishhide = 1,
}
local frames = GUI:Frames_Create(L
你的代码问题在于**作用域和条件逻辑**。
```lua
local xulie = 0
for k, v in pairs(d) do
if string.find(itemData.Name, k) then
xulie = v
local ext = {
count = 20,
speed = 100,
loop = -1,
finishhide = 1,
}
local frames = GUI:Frames_Create(ListBg, "frames", 0, 0, 'res/xixi/xuliezhen/'..xulie..'/', ".png", 1, 20, ext)
GUI:setVisible(frames, false)
GUI:setLocalZOrder(frames, 0)
break
end
end
-- 问题1:如果string.find没匹配到,xulie还是0
-- 问题2:Frames_Create创建在for循环内部,只有匹配时才创建
```
**区别分析:**
1. **第一段代码**:
- 只有在`string.find(itemData.Name, k)`匹配成功时才创建`frames`
- 如果`d`表中没有匹配项,`xulie`保持为0,路径变成`res/xixi/xuliezhen/0/`(可能不存在)
- `frames`创建在for循环作用域内
2. **第二段代码**:
- 直接使用`xulie=10`,路径固定为`res/xixi/xuliezhen/10/`
- 无条件创建`frames`,肯定能显示
**解决方案:**
```lua
local xulie = 0
local found = false
for k, v in pairs(d) do
if string.find(itemData.Name, k) then
xulie = v
found = true
break
end
end
-- 检查是否找到匹配项
if found and xulie > 0 then
local ext = {
count = 20,
speed = 100,
loop = -1,
finishhide = 1,
}
local frames = GUI:Frames_Create(ListBg, "frames", 0, 0, 'res/xixi/xuliezhen/'..xulie..'/', ".png", 1, 20, ext)
GUI:setVisible(frames, false)
GUI:setLocalZOrder(frames, 0)
SL:print("创建序列帧,路径:res/xixi/xuliezhen/"..xulie.."/")
else
SL:print("未找到匹配的序列帧,itemData.Name="..(itemData.Name or "nil"))
end
```
**关键点:**
- 检查`d`表内容和`itemData.Name`的值
- 确保`res/xixi/xuliezhen/`目录下有对应的子文件夹(如10、20等)
- 使用`SL:print`调试输出,确认匹配结果
浮生梦老师提醒:写循环时要注意作用域问题,重要的UI创建最好放在循环外部控制!