Bag = {}
function Bag.Init(isWin32)
-- 网格配置
Bag._ScrollHeight = isWin32 and 214 or 320 -- 容器滚动区域的高度
Bag._PWidth = isWin32 and 338 or 500 -- 容器可见区域 宽
Bag._PHeight = isWin32 and 214 or 320 -- 容器可见区域 高
Bag._IW
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-18 11:42:01 |
👁️ 阅读: 3
根据浮生梦老师前端课程内容,您需要在滚动容器中创建格子并放置装备。以下是完整的代码实现:
```lua
-- 在Bag.main函数中添加装备格子初始化
function Bag.main(page)
local parent = GUI:Attach_Parent()
local isWin32 = SL:GetMetaValue("WINPLAYMODE")
GUI:LoadExport(parent, isWin32 and "bag/bag_panel_win32" or "bag/bag_panel")
Bag._ui = GUI:ui_delegate(parent)
Bag._UI_ScrollView = Bag._ui["ScrollView_items"]
-- 初始化数据
Bag.Init(isWin32)
-- 适配
GUI:setPositionY(Bag._ui["Panel_1"], isWin32 and SL:GetMetaValue("PC_POS_Y") or SL:GetMetaValue("SCREEN_HEIGHT") / 2)
-- 界面拖动
GUI:Win_SetDrag(parent, Bag._ui["Image_bg"])
-- 界面浮起
GUI:Win_SetZPanel(parent, Bag._ui["Image_bg"])
GUI:addOnClickEvent(Bag._ui["Button_close"], function()
SL:CloseBagUI()
end)
-- 存入英雄背包
local Button_store_hero_bag = Bag._ui["Button_store_hero_bag"]
GUI:addOnClickEvent(Button_store_hero_bag, function()
local changeStoreMode = not Bag._changeStoreMode
if changeStoreMode then
local isActiveHero = SL:GetMetaValue("HERO_IS_ACTIVE")
if not isActiveHero then
return SL:ShowSystemTips("英雄还未激活")
end
local isCallHero = SL:GetMetaValue("HERO_IS_ALIVE")
if not isCallHero then
return SL:ShowSystemTips("英雄还未召唤")
end
end
Bag._changeStoreMode = changeStoreMode
GUI:Button_setGrey(Button_store_hero_bag, changeStoreMode)
end)
GUI:setVisible(Button_store_hero_bag, SL:GetMetaValue("USEHERO"))
-- 初始化左侧背包页签
Bag.InitPage()
Bag.PageTo(page or 1)
Bag.OnUpdateGold()
-- 创建装备格子
Bag.CreateEquipmentGrids()
Bag.RegisterEvent()
end
-- 创建装备格子的函数
function Bag.CreateEquipmentGrids()
-- 装备列表
local equipments = {
"九天玄气",
"阴阳逆乱",
"乾坤定星盘",
"鬼新娘の呼唤",
"帝乙木敕令",
"无极剑魂·道天一心"
}
-- 格子配置
local gridWidth = 80
local gridHeight = 80
local gridSpacing = 10
local startX = 20
local startY = Bag._ScrollHeight - 20
-- 创建10个格子
for i = 1, 10 do
local x = startX + ((i - 1) % 5) * (gridWidth + gridSpacing)
local y = startY - math.floor((i - 1) / 5) * (gridHeight + gridSpacing)
-- 创建格子背景
local gridBg = GUI:Image_Create(Bag._UI_ScrollView, "grid_bg_" .. i, x, y, "res/public/1900000610.png")
GUI:setContentSize(gridBg, gridWidth, gridHeight)
-- 创建格子按钮
local gridBtn = GUI:Button_Create(gridBg, "grid_btn_" .. i, 0, 0, "res/public/1900000612.png")
GUI:setContentSize(gridBtn, gridWidth, gridHeight)
-- 如果有对应的装备,显示装备名称
if equipments[i] then
local equipName = GUI:Text_Create(gridBg, "equip_name_" .. i, 0, -30, 14, "#ffffff", equipments[i])
GUI:setAnchorPoint(equipName, 0.5, 0.5)
GUI:setPosition(equipName, gridWidth / 2, -15)
-- 设置字体样式
GUI:Text_setFontName(equipName, "fonts/font5.ttf")
end
-- 添加点击事件
GUI:addOnClickEvent(gridBtn, function()
if equipments[i] then
SL:Print("点击了装备:" .. equipments[i])
else
SL:Print("点击了第" .. i .. "个格子(空)")
end
end)
-- 设置格子tag
GUI:setTag(gridBtn, i)
end
-- 调整滚动容器大小
local totalHeight = 2 * (gridHeight + gridSpacing) + 40
GUI:ScrollView_setInnerContainerSize(Bag._UI_ScrollView, Bag._PWidth, totalHeight)
end
-- 在Bag.Init函数中设置正确的_openNum
function Bag.Init(isWin32)
-- 网格配置
Bag._ScrollHeight = isWin32 and 214 or 320
Bag._PWidth = isWin32 and 338 or 500
Bag._PHeight = isWin32 and 214 or 320
Bag._IWidth = isWin32 and 42.8 or 62.5
Bag._IHeight = isWin32 and 40.6 or 64
Bag._Row = 5
Bag._Col = 8
Bag._PerPageNum = 40
Bag._defaultNum = 40
Bag._MaxPage = 5
Bag._codeInitGrid = false
Bag._changeStoreMode = false
Bag._bagPage = 1
Bag._selPage = 0
Bag._openNum = SL:GetMetaValue("MAX_BAG") -- 这里应该是"MAX_BAG"而不是空字符串
Bag._lockImg = "res/public/icon_tyzys_01.png"
Bag._baiTanImg = isWin32 and "res/public/word_bqzy_09_1.png" or "res/public/word_bqzy_09.png"
Bag._bagPageBtns = {}
end
```
这段代码实现了以下功能:
1. **创建装备格子**:在滚动容器中创建10个格子,使用指定的背景和按钮图片
2. **装备显示**:为前6个格子显示指定的装备名称
3. **点击事件**:为每个格子添加点击事件,点击时打印对应信息
4. **布局排列**:格子按照5列2行的方式排列,有适当的间距
5. **滚动容器调整**:根据格子数量调整滚动容器的大小
**关键函数说明**:
- `GUI:Image_Create(parent, id, x, y, imagePath)`:创建图片控件
- `GUI:Button_Create(parent, id, x, y, imagePath)`:创建按钮控件
- `GUI:Text_Create(parent, id, x, y, fontSize, color, text)`:创建文本控件
- `GUI:setContentSize(widget, width, height)`:设置控件大小
- `GUI:ScrollView_setInnerContainerSize(scrollView, width, height)`:设置滚动容器内部大小
注意:您需要确保`Bag._UI_ScrollView`是有效的滚动容器对象,并且`res/public/1900000610.png`和`res/public/1900000612.png`图片路径存在。
根据浮生梦老师前端课程内容,您需要在滚动容器中创建格子并放置装备。以下是完整的代码实现:
```lua
-- 在Bag.main函数中添加装备格子初始化
function Bag.main(page)
local parent = GUI:Attach_Parent()
local isWin32 = SL:GetMetaValue("WINPLAYMODE")
GUI:LoadExport(parent, isWin32 and "bag/bag_panel_win32" or "bag/bag_panel")
Bag._ui = GUI:ui_delegate(parent)
Bag._UI_ScrollView = Bag._ui["ScrollView_items"]
-- 初始化数据
Bag.Init(isWin32)
-- 适配
GUI:setPositionY(Bag._ui["Panel_1"], isWin32 and SL:GetMetaValue("PC_POS_Y") or SL:GetMetaValue("SCREEN_HEIGHT") / 2)
-- 界面拖动
GUI:Win_SetDrag(parent, Bag._ui["Image_bg"])
-- 界面浮起
GUI:Win_SetZPanel(parent, Bag._ui["Image_bg"])
GUI:addOnClickEvent(Bag._ui["Button_close"], function()
SL:CloseBagUI()
end)
-- 存入英雄背包
local Button_store_hero_bag = Bag._ui["Button_store_hero_bag"]
GUI:addOnClickEvent(Button_store_hero_bag, function()
local changeStoreMode = not Bag._changeStoreMode
if changeStoreMode then
local isActiveHero = SL:GetMetaValue("HERO_IS_ACTIVE")
if not isActiveHero then
return SL:ShowSystemTips("英雄还未激活")
end
local isCallHero = SL:GetMetaValue("HERO_IS_ALIVE")
if not isCallHero then
return SL:ShowSystemTips("英雄还未召唤")
end
end
Bag._changeStoreMode = changeStoreMode
GUI:Button_setGrey(Button_store_hero_bag, changeStoreMode)
end)
GUI:setVisible(Button_store_hero_bag, SL:GetMetaValue("USEHERO"))
-- 初始化左侧背包页签
Bag.InitPage()
Bag.PageTo(page or 1)
Bag.OnUpdateGold()
-- 创建装备格子
Bag.CreateEquipmentGrids()
Bag.RegisterEvent()
end
-- 创建装备格子的函数
function Bag.CreateEquipmentGrids()
-- 装备列表
local equipments = {
"九天玄气",
"阴阳逆乱",
"乾坤定星盘",
"鬼新娘の呼唤",
"帝乙木敕令",
"无极剑魂·道天一心"
}
-- 格子配置
local gridWidth = 80
local gridHeight = 80
local gridSpacing = 10
local startX = 20
local startY = Bag._ScrollHeight - 20
-- 创建10个格子
for i = 1, 10 do
local x = startX + ((i - 1) % 5) * (gridWidth + gridSpacing)
local y = startY - math.floor((i - 1) / 5) * (gridHeight + gridSpacing)
-- 创建格子背景
local gridBg = GUI:Image_Create(Bag._UI_ScrollView, "grid_bg_" .. i, x, y, "res/public/1900000610.png")
GUI:setContentSize(gridBg, gridWidth, gridHeight)
-- 创建格子按钮
local gridBtn = GUI:Button_Create(gridBg, "grid_btn_" .. i, 0, 0, "res/public/1900000612.png")
GUI:setContentSize(gridBtn, gridWidth, gridHeight)
-- 如果有对应的装备,显示装备名称
if equipments[i] then
local equipName = GUI:Text_Create(gridBg, "equip_name_" .. i, 0, -30, 14, "#ffffff", equipments[i])
GUI:setAnchorPoint(equipName, 0.5, 0.5)
GUI:setPosition(equipName, gridWidth / 2, -15)
-- 设置字体样式
GUI:Text_setFontName(equipName, "fonts/font5.ttf")
end
-- 添加点击事件
GUI:addOnClickEvent(gridBtn, function()
if equipments[i] then
SL:Print("点击了装备:" .. equipments[i])
else
SL:Print("点击了第" .. i .. "个格子(空)")
end
end)
-- 设置格子tag
GUI:setTag(gridBtn, i)
end
-- 调整滚动容器大小
local totalHeight = 2 * (gridHeight + gridSpacing) + 40
GUI:ScrollView_setInnerContainerSize(Bag._UI_ScrollView, Bag._PWidth, totalHeight)
end
-- 在Bag.Init函数中设置正确的_openNum
function Bag.Init(isWin32)
-- 网格配置
Bag._ScrollHeight = isWin32 and 214 or 320
Bag._PWidth = isWin32 and 338 or 500
Bag._PHeight = isWin32 and 214 or 320
Bag._IWidth = isWin32 and 42.8 or 62.5
Bag._IHeight = isWin32 and 40.6 or 64
Bag._Row = 5
Bag._Col = 8
Bag._PerPageNum = 40
Bag._defaultNum = 40
Bag._MaxPage = 5
Bag._codeInitGrid = false
Bag._changeStoreMode = false
Bag._bagPage = 1
Bag._selPage = 0
Bag._openNum = SL:GetMetaValue("MAX_BAG") -- 这里应该是"MAX_BAG"而不是空字符串
Bag._lockImg = "res/public/icon_tyzys_01.png"
Bag._baiTanImg = isWin32 and "res/public/word_bqzy_09_1.png" or "res/public/word_bqzy_09.png"
Bag._bagPageBtns = {}
end
```
这段代码实现了以下功能:
1. **创建装备格子**:在滚动容器中创建10个格子,使用指定的背景和按钮图片
2. **装备显示**:为前6个格子显示指定的装备名称
3. **点击事件**:为每个格子添加点击事件,点击时打印对应信息
4. **布局排列**:格子按照5列2行的方式排列,有适当的间距
5. **滚动容器调整**:根据格子数量调整滚动容器的大小
**关键函数说明**:
- `GUI:Image_Create(parent, id, x, y, imagePath)`:创建图片控件
- `GUI:Button_Create(parent, id, x, y, imagePath)`:创建按钮控件
- `GUI:Text_Create(parent, id, x, y, fontSize, color, text)`:创建文本控件
- `GUI:setContentSize(widget, width, height)`:设置控件大小
- `GUI:ScrollView_setInnerContainerSize(scrollView, width, height)`:设置滚动容器内部大小
注意:您需要确保`Bag._UI_ScrollView`是有效的滚动容器对象,并且`res/public/1900000610.png`和`res/public/1900000612.png`图片路径存在。
← 返回问答库