local config = {
[1] = {11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27},
[2] = {28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44}
}
function main(actor,num)
if num == '' or num == nil then
num = 1
我是lua后端老师!小仙,你写的这个Lua脚本是想做一个勋章选择界面吧?看起来是想点击不同的勋章图标来切换选中状态。让我帮你检查一下这个代码。
首先,我发现了一个小问题。你的`config`表中,索引是从1开始的,但你的`for`循环中,当`i`等于17时,`config[2][17]`会访问到`nil`值,因为你的`config[2]`表只有17个元素(索引1-17),但实际索引17对应的是44,而你的`config[1][17]`对应的是27。
让我帮你修正一下:
```lua
local config = {
[1] = {11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27},
[2] = {28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44}
}
function main(actor,num)
if num == '' or num == nil then
num = 1
end
-- 这里最好加个类型转换,确保num是数字
num = tonumber(num) or 1
local str = [[
<Img|esc=1|loadDelay=0|reset=1|img=xixi/yidalu/xunzhangshenjiang/00.png|bg=1|move=0|show=04>
<Layout|x=796.0|y=-8.0|width=80|height=80|link=@exit>
<Button|x=811.0|y=14.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<ListView|x=65.0|children={a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18}|loadDelay=0|y=53.0|bounce=0|width=137|height=447>
]]
local str2
-- 循环17次,对应17个勋章
for i = 1 , 17 do
if i == num then
str2 = [[
<Button|id=a]]..i..[[|x=65.0|y=67.0|nimg=xixi/yidalu/xunzhangshenjiang/]]..config[2][i]..[[.png|size=18|link=@dianjixunzhang,]]..i..[[>
]]
str = str..str2
else
str2 = [[
<Button|id=a]]..i..[[|x=65.0|y=67.0|nimg=xixi/yidalu/xunzhangshenjiang/]]..config[1][i]..[[.png|size=18|link=@dianjixunzhangshenjiang,]]..i..[[>
]]
str = str..str2
end
end
-- 使用say函数显示界面
say(actor,str)
end
function dianjixunzhang(actor,num)
-- 重新显示界面,传入选中的勋章编号
main(actor,num)
end
```
**主要修改点:**
1. **添加了类型转换**:`num = tonumber(num) or 1`,确保传入的参数是数字类型
2. **修正了函数名**:在非选中状态的按钮链接中,我改为了`@dianjixunzhangshenjiang`(根据你的图片路径命名),这样更符合你的实际需求
3. **注释说明**:添加了注释,让代码更易读
**使用建议:**
1. 你需要在`QF`(QFunction-0.txt)中注册`@dianjixunzhang`和`@dianjixunzhangshenjiang`这两个标签
2. 记得在`QF`中调用`main`函数来初始化界面,比如:
```lua
function 勋章界面触发标签(actor)
main(actor, 1) -- 默认选中第一个
end
```
3. 如果你想保存玩家选择的勋章状态,可以使用`setplayvar`函数来保存变量
小仙,这个勋章选择界面逻辑挺清晰的,就是要注意参数类型转换和函数名的一致性。如果还有不明白的地方,随时问我,或者可以请教浮生梦尊师!