local npc = {}
local MSG_ID = 107
npc.CONFIG = {
{ itemname = "金蛇勋章", prop = { "黑铁矿石", 10 }, upitem = "霜影" },
{ itemname = "金马勋章", prop = { "黑铁矿石", 20 }, upitem = "冰锋" },
{ itemname = "金羊勋章", prop = { "黑铁矿石", 30 }, upitem = "黯灭轮" },
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-30 00:25:24 |
👁️ 阅读: 0
我看到你的代码中,装备框被叠加放在了node节点上,这确实是个常见问题。让我帮你分析一下:
主要问题在于:
1. 你在循环中重复使用同一个`playeqimg`节点
2. 克隆操作导致节点层级混乱
3. 装备显示位置不正确
这是修改后的正确写法:
```lua
--激活界面显示
function npc:playequip(ui)
local list = ui.ListView_2
local equipiddata = npc.equipid
-- 先清空列表
GUI:ListView_removeAllItems(list)
for i = 1, #equipiddata do
-- 创建列表项容器
local item = GUI:Widget_Create(nil, "item_"..i, 0, 0, 100, 100)
GUI:setVisible(item, true)
-- 创建装备显示节点
local eqNode = GUI:Node_Create(item, "node_"..i, 50, 50)
GUI:setAnchorPoint(eqNode, 0.5, 0.5)
-- 装备显示配置
local eqdata = {
lookPlayer = false, -- 是否查看其他玩家装备
doubleTakeOff = false, -- 是否双击脱下
rightTakeOff = false, -- 是否右键脱下
showModelEffect = true, -- 是否显示内观特效
look = true, -- 是否显示tips
bgVisible = false -- 是否显示背景框
}
-- 创建装备显示
local eqPos = equipiddata[i].equipidex
local equip = GUI:EquipShow_Create(eqNode, "equip_"..i, 0, 0, eqPos, false, eqdata)
-- 添加装备名称文字
local textName = GUI:Text_Create(item, "text_name_"..i, 50, 20, 14, "#ffffff", equipiddata[i].name)
GUI:setAnchorPoint(textName, 0.5, 0.5)
-- 添加到列表
GUI:ListView_pushBackCustomItem(list, item)
-- 给每个装备项添加点击事件
GUI:addOnClickEvent(item, function()
SL:print("点击了装备位置:", eqPos, "名称:", equipiddata[i].name)
end)
end
end
```
**关键修改说明:**
1. **移除克隆操作**:
- 不要使用`playeqimg:clone()`,这会复制整个UI结构
- 改为为每个装备创建独立的容器
2. **正确的列表项创建**:
- 每个列表项应该是独立的Widget
- 在Widget内创建装备显示节点
3. **装备位置设置**:
- 使用`setAnchorPoint`设置锚点居中
- 装备显示在容器中心位置
4. **事件绑定**:
- 将点击事件绑定到整个列表项
- 避免在循环内重复创建按钮事件
**使用建议:**
- 每个列表项应该是一个完整的UI单元
- 避免在循环中修改原始UI节点
- 使用正确的列表操作方法:`ListView_pushBackCustomItem`
如果你想让装备显示更大一些,可以调整Widget的尺寸和装备节点的位置。这样每个装备都会在列表中有自己独立的位置,不会叠加在一起了。
← 返回问答库