local npc = {}
local MSG_ID = 107
npc.CONFIG = {
{ itemname = "金蛇勋章", prop = { "黑铁矿石", 10 }, upitem = "霜影" },
{ itemname = "金马勋章", prop = { "黑铁矿石", 20 }, upitem = "冰锋" },
{ itemname = "金羊勋章", prop = { "黑铁矿石", 30 }, upitem = "黯灭轮" },
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-29 23:49:16 |
👁️ 阅读: 0
在 `npc:playequip(ui)` 函数中,装备框物品被叠加显示的主要原因是:
1. **错误的克隆操作**:
```lua
local newwidget = playeqimg:clone() --cocos的克隆
GUI:setVisible(newwidget, true) --设置控件可见性
list:add(newwidget)
```
每次循环都在 `playeqimg`(Image_6)上创建 `EquipShow` 控件,然后克隆整个 `playeqimg` 添加到 `ListView_2` 中。这样每个克隆的节点都包含了之前循环创建的所有 `EquipShow` 控件。
2. **EquipShow创建位置固定**:
```lua
local equip = GUI:EquipShow_Create(playeqimg, eqOnlyID, 0, 0, eqPos, false, eqdata)
```
所有 `EquipShow` 都创建在 `playeqimg` 的相同位置 (0,0),导致叠加显示。
**正确的做法**应该是为每个列表项创建独立的父节点,然后在各自的父节点上创建装备框:
```lua
function npc:playequip(ui)
local list = ui.ListView_2
local equipiddata = npc.equipid
GUI:ListView_removeAllItems(list)
for i = 1, #npc.equipid do
-- 创建独立的列表项
local itemNode = GUI:Layout_Create(list, "item_"..i, 0, 0, 100, 100, false)
local eqdata = {
lookPlayer = false,
doubleTakeOff = false,
rightTakeOff = false,
showModelEffect = true,
look = true,
bgVisible = false
}
-- 在独立的itemNode上创建EquipShow
local eqOnlyID = "equip_" .. i
local eqPos = equipiddata[i].equipidex
local equip = GUI:EquipShow_Create(itemNode, eqOnlyID, 50, 50, eqPos, false, eqdata)
GUI:EquipShow_setAutoUpdate(equip)
-- 添加列表项
GUI:ListView_pushBackCustomItem(list, itemNode)
-- 点击事件(需要调整到正确的按钮)
GUI:addOnClickEvent(ui.Button_4, function()
SL:print(equipiddata[i].equipidex, "///", i)
end)
end
end
```
注意:点击事件绑定在循环内部会导致每次循环都重新绑定 `Button_4`,最后只有最后一个生效。如果是要点击装备框触发,应该绑定在 `itemNode` 或 `equip` 上。
← 返回问答库