GUI:setVisible(JM_show, true)
local item_Panel_1 = GUI:getChildByName(JM_show, "item_Panel_1")
local ListView_fj = GUI:getChildByName(JM_show, "ListView_fj")
GUI:removeAllChildren(ListView_fj)
local bagItems = SL:GetMe
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-05 01:32:08 |
👁️ 阅读: 17
你的代码思路是正确的,但有几个细节需要调整。主要问题是创建子项和循环逻辑的匹配。
```lua
GUI:setVisible(JM_show, true)
local item_Panel_1 = GUI:getChildByName(JM_show, "item_Panel_1")
local ListView_fj = GUI:getChildByName(JM_show, "ListView_fj")
GUI:removeAllChildren(ListView_fj)
local bagItems = SL:GetMetaValue("BAG_DATA") -- 获取背包物品列表
local targetEquips = {} -- 存储找到的装备
if bagItems then
for _, itemData in pairs(bagItems) do
-- 检查物品是否存在且StdMode为65
if itemData and itemData.StdMode and itemData.StdMode == 65 then
table.insert(targetEquips, itemData)
end
end
end
SL:dump(targetEquips)
-- 计算需要多少个item_bj(每页6个)
local totalItems = #targetEquips
local pageCount = math.ceil(totalItems / 6) -- 向上取整得到页数
-- 创建对应数量的item_bj
for i = 1, pageCount do
local item_bj = GUI:Clone(item_Panel_1)
GUI:setVisible(item_bj, true)
GUI:setName(item_bj, "item_bj_" .. i) -- 设置唯一名称方便获取
GUI:addChild(ListView_fj, item_bj)
end
-- 遍历所有装备,分配到对应的item_bj中
for index, itemData in ipairs(targetEquips) do
-- 计算当前装备属于第几个item_bj
local pageIndex = math.ceil(index / 6)
-- 计算在当前item_bj中的位置(1-6)
local posInPage = ((index - 1) % 6) + 1
-- 获取对应的item_bj
local item_bj = GUI:getChildByName(ListView_fj, "item_bj_" .. pageIndex)
if not GUI:Win_IsNull(item_bj) then
-- 创建物品显示
local itemDataTable = {
index = itemData.ItemIndex,
look = true,
bgVisible = false,
count = 1,
color = 225
}
-- 注意:这里使用posInPage作为唯一标识的一部分
local item = GUI:ItemShow_Create(item_bj, "fj_item" .. pageIndex .. "_" .. posInPage, 0, 0, itemDataTable)
-- 设置物品位置(假设每个格子间隔50像素)
local x = ((posInPage - 1) % 3) * 60 -- 每行3个
local y = math.floor((posInPage - 1) / 3) * 60 -- 每列2个
GUI:setPosition(item, x, y)
end
end
```
**主要修改点:**
1. **页数计算**:使用`math.ceil(totalItems / 6)`正确计算需要多少个item_bj
2. **命名设置**:克隆后给每个item_bj设置唯一名称`GUI:setName(item_bj, "item_bj_" .. i)`
3. **循环逻辑**:遍历所有装备而不是固定6个,使用取模运算计算位置
4. **位置计算**:假设每个格子60x60像素,每行3个,每列2个
5. **空值判断**:添加`GUI:Win_IsNull()`检查避免空指针
**注意**:如果item_bj中已经有6个预设的子节点(比如item_1到item_6),你可以直接获取这些子节点来放置物品:
```lua
-- 如果item_bj中已有6个子节点
local itemNode = GUI:getChildByName(item_bj, "item_" .. posInPage)
if not GUI:Win_IsNull(itemNode) then
local item = GUI:ItemShow_Create(itemNode, "fj_item" .. pageIndex .. "_" .. posInPage, 0, 0, itemDataTable)
end
```
这样就能实现每6个装备放入一个item_bj,然后自动创建新的item_bj继续存放。
← 返回问答库