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 == nil or num == '' then
num = 1
end
config[1][num] = config[2]
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-01 18:06:20 |
👁️ 阅读: 1
我是Lua后端老师!
小仙,你这代码问题挺明显的,让为师给你分析一下:
首先,你点击按钮后确实触发了 `dianjixunzhang` 函数,因为 `release_print(num)` 会打印出按钮的序号。但图片不换的原因是:
1. **图片路径没更新**:你只是在 `config[1][num] = config[2][num]` 这里修改了配置表,但**没有重新生成界面**!
2. **界面是静态的**:你第一次调用 `main` 函数生成界面后,这个界面就固定了。点击按钮只是调用了另一个函数,并没有重新调用 `main` 函数来刷新界面。
要解决这个问题,你需要在点击按钮后重新生成界面。修改 `dianjixunzhang` 函数:
```lua
function dianjixunzhang(actor, num)
-- 先修改配置
config[1][num] = config[2][num]
-- 再重新生成界面
local str = [[
<Img|esc=1|loadDelay=1|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}|y=53.0||bounce=0|width=137|height=447>
]]
local str2
for i = 1, 17 do
str2 = [[
<Button|id=a]]..i..[[|x=65.0|y=67.0|nimg=xixi/yidalu/xunzhangshenjiang/]]..config[1][i]..[[.png|size=18|link=@dianjixunzhang,]]..i..[[>
]]
str = str..str2
end
-- 重新显示界面
say(actor, str)
end
```
这样修改后,每次点击按钮都会:
1. 更新 `config[1][num]` 的值为对应的勋章图片编号
2. 重新生成整个界面,使用更新后的图片路径
注意:你的 `config` 表定义在函数外面,是全局的,所以修改后会一直生效。但要注意多个玩家同时操作可能会有数据干扰问题,建议用玩家变量来存储每个玩家的配置。
不懂的可以问你浮生梦尊师哦!
我是Lua后端老师!
小仙,你这代码问题挺明显的,让为师给你分析一下:
首先,你点击按钮后确实触发了 `dianjixunzhang` 函数,因为 `release_print(num)` 会打印出按钮的序号。但图片不换的原因是:
1. **图片路径没更新**:你只是在 `config[1][num] = config[2][num]` 这里修改了配置表,但**没有重新生成界面**!
2. **界面是静态的**:你第一次调用 `main` 函数生成界面后,这个界面就固定了。点击按钮只是调用了另一个函数,并没有重新调用 `main` 函数来刷新界面。
要解决这个问题,你需要在点击按钮后重新生成界面。修改 `dianjixunzhang` 函数:
```lua
function dianjixunzhang(actor, num)
-- 先修改配置
config[1][num] = config[2][num]
-- 再重新生成界面
local str = [[
<Img|esc=1|loadDelay=1|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}|y=53.0||bounce=0|width=137|height=447>
]]
local str2
for i = 1, 17 do
str2 = [[
<Button|id=a]]..i..[[|x=65.0|y=67.0|nimg=xixi/yidalu/xunzhangshenjiang/]]..config[1][i]..[[.png|size=18|link=@dianjixunzhang,]]..i..[[>
]]
str = str..str2
end
-- 重新显示界面
say(actor, str)
end
```
这样修改后,每次点击按钮都会:
1. 更新 `config[1][num]` 的值为对应的勋章图片编号
2. 重新生成整个界面,使用更新后的图片路径
注意:你的 `config` 表定义在函数外面,是全局的,所以修改后会一直生效。但要注意多个玩家同时操作可能会有数据干扰问题,建议用玩家变量来存储每个玩家的配置。
不懂的可以问你浮生梦尊师哦!
← 返回问答库