local ui = {}
local _V = function(...) return SL:GetMetaValue(...) end
local FUNCQUEUE = {}
local TAGOBJ = {}
function ui.init(parent, __data__, __update__)
if __update__ then return ui.update(__data__) end
-- Create Scene
local Scene = GUI:Layou
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-06 17:05:33 |
👁️ 阅读: 0
根据浮生梦老师前端课程内容,要实现打开界面时左侧容器创建5个按钮并点击传送不同地图的功能,需要在 `n1_chuansong:main()` 函数中完成以下步骤:
```lua
function n1_chuansong:main()
SL:print("===========进入到NPC界面")
-- 创建界面
local parent = GUI:Win_Create(self.name, 0, 0, 0, 0, false, false, true, true)
-- 加载ui文件
self.parent = parent
GUI:LoadExport(parent, "A/n1_chuansong")
self.ui = GUI:ui_delegate(parent)
-- 界面居中
GUI:setPosition(self.ui.Node, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
-- 按钮关闭界面
GUI:addOnClickEvent(self.ui.close, function()
GUI:Win_Close(parent)
end)
-- 背景关闭界面
GUI:addOnClickEvent(self.ui.bg_black, function()
GUI:Win_Close(parent)
end)
-- 清空列表容器
local listView = self.ui.ListView_1
if listView then
GUI:removeAllChildren(listView)
end
-- 定义5个地图配置
local mapConfigs = {
{name = "比奇城", mapId = "0"},
{name = "盟重省", mapId = "3"},
{name = "沙巴克城", mapId = "4"},
{name = "白日门", mapId = "11"},
{name = "苍月岛", mapId = "5"}
}
-- 创建5个按钮
for i, config in ipairs(mapConfigs) do
-- 创建按钮
local btn = GUI:Button_Create(listView, "btn_map_"..i, 0, 0, "res/public/1900000612.png")
if btn then
-- 设置按钮文字
GUI:Button_setTitleText(btn, config.name)
GUI:Button_setTitleColor(btn, "#ffffff")
GUI:Button_setTitleFontSize(btn, 16)
-- 设置按钮大小和位置
GUI:setContentSize(btn, {width = 120, height = 40})
GUI:setAnchorPoint(btn, 0, 0)
-- 按钮点击事件
GUI:addOnClickEvent(btn, function()
-- 记录选择的地图ID
self.p1 = i
-- 更新显示文本
if self.ui.Text_1 then
GUI:Text_setString(self.ui.Text_1, "选择地图:"..config.name)
end
SL:print("选择了地图:"..config.name..",ID:"..config.mapId)
end)
-- 添加到列表
GUI:ListView_pushBackCustomItem(listView, btn)
end
end
-- 初始化显示文本
if self.ui.Text_1 then
GUI:Text_setString(self.ui.Text_1, "请选择传送地图")
end
-- 传送按钮点击事件
GUI:addOnClickEvent(self.ui.btok, function()
if self.p1 and self.p1 > 0 and self.p1 <= #mapConfigs then
local selectedMap = mapConfigs[self.p1]
SL:print("开始传送至:"..selectedMap.name)
-- 向服务端发送消息(QF接收 handlerequest)
SL:SendLuaNetMsg(110, self.p1, 0, 0, selectedMap.mapId)
else
SL:print("请先选择地图")
end
end)
end
```
同时需要修改后端QF文件,将地图ID传递给test函数:
```lua
-- 后端QF
-- 接收前端消息
function handlerequest(play,msgid,p1,p2,p3,sMsg)
if msgid == 110 then
release_print("接收客户端消息id:",msgid)
-- sMsg参数包含地图ID
callfunbynpc(play, 11, 0, "test", sMsg)
end
end
```
这样就能实现:
1. 打开界面时自动创建5个地图选择按钮
2. 点击按钮会记录选择并更新显示文本
3. 点击"传送"按钮将选择的地图ID发送给服务端
4. 服务端根据地图ID进行传送
注意:地图ID需要根据实际游戏配置进行调整,`mapmove`函数需要正确的坐标参数。
根据浮生梦老师前端课程内容,要实现打开界面时左侧容器创建5个按钮并点击传送不同地图的功能,需要在 `n1_chuansong:main()` 函数中完成以下步骤:
```lua
function n1_chuansong:main()
SL:print("===========进入到NPC界面")
-- 创建界面
local parent = GUI:Win_Create(self.name, 0, 0, 0, 0, false, false, true, true)
-- 加载ui文件
self.parent = parent
GUI:LoadExport(parent, "A/n1_chuansong")
self.ui = GUI:ui_delegate(parent)
-- 界面居中
GUI:setPosition(self.ui.Node, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)
-- 按钮关闭界面
GUI:addOnClickEvent(self.ui.close, function()
GUI:Win_Close(parent)
end)
-- 背景关闭界面
GUI:addOnClickEvent(self.ui.bg_black, function()
GUI:Win_Close(parent)
end)
-- 清空列表容器
local listView = self.ui.ListView_1
if listView then
GUI:removeAllChildren(listView)
end
-- 定义5个地图配置
local mapConfigs = {
{name = "比奇城", mapId = "0"},
{name = "盟重省", mapId = "3"},
{name = "沙巴克城", mapId = "4"},
{name = "白日门", mapId = "11"},
{name = "苍月岛", mapId = "5"}
}
-- 创建5个按钮
for i, config in ipairs(mapConfigs) do
-- 创建按钮
local btn = GUI:Button_Create(listView, "btn_map_"..i, 0, 0, "res/public/1900000612.png")
if btn then
-- 设置按钮文字
GUI:Button_setTitleText(btn, config.name)
GUI:Button_setTitleColor(btn, "#ffffff")
GUI:Button_setTitleFontSize(btn, 16)
-- 设置按钮大小和位置
GUI:setContentSize(btn, {width = 120, height = 40})
GUI:setAnchorPoint(btn, 0, 0)
-- 按钮点击事件
GUI:addOnClickEvent(btn, function()
-- 记录选择的地图ID
self.p1 = i
-- 更新显示文本
if self.ui.Text_1 then
GUI:Text_setString(self.ui.Text_1, "选择地图:"..config.name)
end
SL:print("选择了地图:"..config.name..",ID:"..config.mapId)
end)
-- 添加到列表
GUI:ListView_pushBackCustomItem(listView, btn)
end
end
-- 初始化显示文本
if self.ui.Text_1 then
GUI:Text_setString(self.ui.Text_1, "请选择传送地图")
end
-- 传送按钮点击事件
GUI:addOnClickEvent(self.ui.btok, function()
if self.p1 and self.p1 > 0 and self.p1 <= #mapConfigs then
local selectedMap = mapConfigs[self.p1]
SL:print("开始传送至:"..selectedMap.name)
-- 向服务端发送消息(QF接收 handlerequest)
SL:SendLuaNetMsg(110, self.p1, 0, 0, selectedMap.mapId)
else
SL:print("请先选择地图")
end
end)
end
```
同时需要修改后端QF文件,将地图ID传递给test函数:
```lua
-- 后端QF
-- 接收前端消息
function handlerequest(play,msgid,p1,p2,p3,sMsg)
if msgid == 110 then
release_print("接收客户端消息id:",msgid)
-- sMsg参数包含地图ID
callfunbynpc(play, 11, 0, "test", sMsg)
end
end
```
这样就能实现:
1. 打开界面时自动创建5个地图选择按钮
2. 点击按钮会记录选择并更新显示文本
3. 点击"传送"按钮将选择的地图ID发送给服务端
4. 服务端根据地图ID进行传送
注意:地图ID需要根据实际游戏配置进行调整,`mapmove`函数需要正确的坐标参数。
← 返回问答库