自定义UI应用(四)
LUA实例应用:自定义UI应用(四)
本课我们将继续学习自定义UI的具体应用,首先我们会学习输入框和按钮拖拽功能的实现,最后,我们还会学习面向对象的编程概念。
视频时间节点:
- 输入框:17:21
- 按钮拖拽:21:53
- 面向对象:25:49
老师介绍:
按钮拖拽
uiid = [[7082749660133022866]]
buttonid = [[7082749660133022866_117]]
statusid = [[7082749660133022866_119]]
dirid =
{
[[7082749660133022866_120]],
[[7082749660133022866_121]],
[[7082749660133022866_122]],
[[7082749660133022866_123]]
}
texture =
{
[[10151]],--手指
[[10318]]--打勾
}
speed = 20
player_list = {}
-- 刷新按钮显示状态
local function updata(playerid, info_tab)
-- 设置按钮位置
Coustomui:setPosition(playerid, uiid, buttonid, info_tab.x, info_tab.y)
-- 设置右上角状态图标
Coustomui:setTexture(playerid, uiid, statusid, info_tab.texture)
-- 设置方向键隐藏或显示
if(info_tab.texture == texture[1])
then
for k,v in pairs(dirid)
do
Coustomui:hideElement(playerid, uiid, v)
end
else
for k,v in pairs(dirid)
do
Coustomui:showElement(playerid, uiid, v)
end
end
end
-- 有玩家进入游戏时运行
local function Game_AnyPlayer_EnterGame(event)
local uin = event.eventobjid--进入游戏的玩家迷你号
Player:openUIView(uin,uiid)--给玩家打开界面
player_list[uin] = {texture = texture[1], x = 565, y = 266}
updata(uin, player_list[uin])
end
-- 注册有玩家进入游戏监听器
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=], Game_AnyPlayer_EnterGame)
-- 界面中的按钮被松开时运行
local function UI_Button_Click(event)
local uin = event.eventobjid
-- 按下右上角的切换状态按键
if(event.btnelenemt == statusid)
then
if(player_list[uin].texture == texture[1])
then
player_list[uin].texture = texture[2]
else
player_list[uin].texture = texture[1]
end
updata(uin, player_list[uin])
-- 按下方向键
else
for k,v in pairs(dirid)
do
if(event.btnelenemt == v)
then
-- 上
if(k == 1)
then
player_list[uin].y = player_list[uin].y - speed
-- 下
elseif(k == 2)
then
player_list[uin].y = player_list[uin].y + speed
-- 左
elseif(k == 3)
then
player_list[uin].x = player_list[uin].x - speed
-- 右
elseif(k == 4)
then
player_list[uin].x = player_list[uin].x + speed
end
end
end
updata(uin, player_list[uin])
end
end
-- 注册界面中的按钮被松开监听器
ScriptSupportEvent:registerEvent([=[UI.Button.Click]=], UI_Button_Click)
输入框
uiid = [[7082749660133022866]]
content = "12"
-- 有玩家进入游戏时运行
local function Game_AnyPlayer_EnterGame(event)
local uin=event.eventobjid--进入游戏的玩家迷你号
Player:openUIView(uin,uiid)--给玩家打开界面
end
-- 注册有玩家进入游戏监听器
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=], Game_AnyPlayer_EnterGame)
-- ui输入框失去焦点时运行
local function UI_LostFocus(event)
local hour = tonumber(event.content)
if(hour and hour >= 0 and hour < 24)
then
GameRule.CurTime = hour
content = tostring(hour)
else
Chat:sendSystemMsg("无效的时间,请重新输入")
local playerid=event.eventobjid
local uiid=event.CustomUI
local elementid=event.btnelenemt
local text=content
--设置玩家的文本元件的显示内容
Coustomui:setText(playerid, uiid, elementid, text)
end
end
-- 注册ui输入框失去焦点监听器
ScriptSupportEvent:registerEvent([=[UI.LostFocus]=], UI_LostFocus)