SL:print("==========加载传送员")
local list = {
{ name = "比奇城", mapId = "0" },
{ name = "盟重省", mapId = "3" },
{ name = "沙巴克城", mapId = "4" },
{ name = "白日门", mapId = "11" },
{ name = "苍月岛", mapId = "5" }
}
local n1_chuansong = {}
n1_c
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-06 17:40:43 |
👁️ 阅读: 1
你的代码问题在于 `self.idx` 访问错误,应该用 `n1_chuansong.idx` 或 `self.idx` 但当前作用域不对,同时缺少按钮点击事件来更新选中状态。
以下是修改后的关键部分:
```lua
-- 刷新界面
function n1_chuansong:initButtons()
-- 按钮容器初始化
local list_v = self.ui.ListView_1
if list_v then
GUI:removeAllChildren(list_v)
end
-- 创建容器内按钮
for k, v in ipairs(list) do
local bt = GUI:Button_Create(list_v, "bt" .. k, 0, 0, "res/custom/chuansong/an1.png")
GUI:Button_setTitleText(bt, v.name)
GUI:Button_setTitleFontSize(bt, 18)
-- 判断当前按钮是否被选中
local isSelected = (n1_chuansong.idx == k)
GUI:Button_setBrightStyle(bt, isSelected and 1 or 0)
GUI:Button_setTitleColor(bt, isSelected and "#FFFF00" or "#A0A0A4")
-- 添加按钮点击事件
GUI:addOnClickEvent(bt, function()
-- 更新选中索引
n1_chuansong.idx = k
-- 更新传送参数
n1_chuansong.p1 = k
-- 刷新所有按钮状态
self:initButtons()
end)
end
end
-- 点击传送按钮
GUI:addOnClickEvent(self.ui.btok, function()
if n1_chuansong.idx > 0 then
-- 向服务端发送选中的索引
SL:SendLuaNetMsg(110, n1_chuansong.idx, 0, 0, "")
SL:print("发送传送请求,目的地索引:" .. n1_chuansong.idx)
else
SL:print("请先选择目的地")
end
end)
```
**修改说明:**
1. **修复选中判断**:使用 `n1_chuansong.idx` 而不是 `self.idx`,因为 `initButtons` 方法内 `self` 指向正确,但需要访问模块的 `idx` 变量
2. **添加按钮点击事件**:每个按钮点击时:
- 更新 `n1_chuansong.idx` 为当前按钮索引
- 更新 `n1_chuansong.p1` 传送参数
- 重新调用 `initButtons()` 刷新所有按钮状态
3. **传送按钮优化**:添加了参数检查,确保已选择目的地
4. **按钮创建修正**:第一个参数使用 `list_v` 而不是 `self.ui.ListView_1`,避免可能的空值问题
**运行逻辑:**
- 初始打开时,第一个按钮高亮(金色)
- 点击任意按钮,该按钮变为金色,其他按钮恢复灰色
- 点击"传送"按钮,发送当前选中按钮的索引到服务端
这样就能实现"点击哪个按钮,哪个按钮变成金色"的效果了。记得在服务端用 `p1` 参数接收选中的索引值。
← 返回问答库