<BAGITEMS|positions=0|condition=*|select=<$STR(S0)>|count=12|row=2|x=0|y=0|selecttype=1|link=@关联物品唯一ID> 你是lua大神 你帮我用lua封装一个这样的函数 我后续好调用
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-28 01:26:19 |
👁️ 阅读: 0
根据浮生梦老师前端课程内容,我来帮你封装一个创建物品框的函数。这个函数会使用`GUI:ItemBox_Create`来创建物品放置框,并设置相关参数。
```lua
-- 创建物品框函数封装
-- @param parent: 父节点对象
-- @param boxId: 物品框唯一ID
-- @param positions: 物品位置数量
-- @param condition: 物品条件筛选
-- @param select: 选中状态
-- @param count: 物品总数
-- @param row: 每行显示数量
-- @param x: X坐标
-- @param y: Y坐标
-- @param selecttype: 选中类型
-- @param link: 关联物品唯一ID
function createItemBox(parent, boxId, positions, condition, select, count, row, x, y, selecttype, link)
-- 参数验证
if GUI:Win_IsNull(parent) then
SL:print("错误:父节点为空")
return nil
end
-- 创建物品框
local itemBox = GUI:ItemBox_Create(parent, boxId, x, y, row, count, positions)
-- 设置物品条件
if condition and condition ~= "*" then
GUI:ItemBox_setCondition(itemBox, condition)
end
-- 设置选中状态
if select then
GUI:ItemBox_setSelect(itemBox, select)
end
-- 设置选中类型
if selecttype then
GUI:ItemBox_setSelectType(itemBox, selecttype)
end
-- 设置关联物品
if link then
GUI:ItemBox_setLinkItem(itemBox, link)
end
-- 设置物品归属(默认使用背包)
GUI:ItemBox_setBelong(itemBox, GUIDefine.ITEM_BELONG.BAG)
return itemBox
end
-- 使用示例:
-- 1. 创建父节点
local parent = GUI:Win_Create("ItemBoxParent", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 2. 调用封装函数创建物品框
local myItemBox = createItemBox(
parent, -- 父节点
"my_item_box", -- 物品框ID
0, -- positions: 物品位置数量
"*", -- condition: 所有物品
"<$STR(S0)>", -- select: 选中状态
12, -- count: 物品总数
2, -- row: 每行2个
0, -- x坐标
0, -- y坐标
1, -- selecttype: 选中类型
"@关联物品唯一ID" -- link: 关联物品ID
)
-- 3. 添加物品点击事件
if myItemBox then
GUI:addOnClickEvent(myItemBox, function()
SL:print("物品框被点击")
-- 获取选中的物品数据
local selectedData = GUI:ItemBox_getSelectData(myItemBox)
if selectedData then
SL:print("选中物品ID:" .. tostring(selectedData.Index))
end
end)
end
-- 4. 更新物品框数据(可选)
-- 当需要更新物品框中的物品时,可以使用:
-- GUI:ItemBox_UpdateBoxData(myItemBox, boxIndex, itemData)
-- 其中boxIndex是放置框索引,itemData是物品数据表
-- 5. 清空物品框数据(可选)
-- GUI:ItemBox_RemoveBoxData(myItemBox, boxIndex)
```
**函数说明:**
1. **参数说明**:
- `parent`: 必须的父节点对象
- `boxId`: 物品框的唯一标识符
- `positions`: 物品位置数量,0表示使用默认
- `condition`: 物品筛选条件,"*"表示所有物品
- `select`: 选中状态表达式
- `count`: 物品框总容量
- `row`: 每行显示物品数量
- `x, y`: 物品框位置坐标
- `selecttype`: 选中类型(1为单选)
- `link`: 关联的物品唯一ID
2. **使用建议**:
- 先创建父节点再调用此函数
- 物品数据可以通过`SL:GetMetaValue("BAG_DATA")`获取
- 可以使用`GUI:ItemBox_UpdateBoxData`动态更新物品
3. **注意事项**:
- 确保父节点有效(使用`GUI:Win_IsNull`检查)
- 物品框创建后需要手动添加事件监听
- 物品归属默认设置为背包,可根据需要修改
这个封装函数让你可以更方便地创建和管理物品框,后续调用时只需要传入对应的参数即可。
← 返回问答库