基本的UI 方面的流程
UI Owner 是 UI逻辑脚本的基类
创建 UI 界面的编写 都是在是Start.LUA中进行注册的
每一个UI的脚本都继承 —Class(' name ',UIowner)
local c=self:Cholder() 间接理解 可以相当于是UI的父
可以通过 c.parent Name.childName 获取到对应的UI
UIOWner.lua 对应的是全局的函数 为 UIOWner
UI逻辑脚本的基类 任何的 UI界面 可以通过他 显示 隐藏 各种 UI逻辑层方面的回调 函数
界面场景的加载
UIOwner:PanelDrag() 子类重写 UIOwner:onNew() 第一次创建UI时的触发 UIOwner:Cholder() 获取UI的根节点 UIOWner:GetIdx() 获取UI所在UI配置中的数据
UIMAnager.LUA 对应全局的UIManager 负责UI逻辑层的鼠标操作 键盘管理操作 各个UI界面的布局调整 刷新 缓存 设置层级
他可以实现对外接口 可以在如何一个地方去调用
UI.LUA 对应的Lua全局函数为 UI
负责各个UI逻辑脚本的快速创及获取 切换 显示 隐藏 函数的反射 显示状态 获取对象绑定的组件
对外的一个接口 可以在如何一个地方去调用他
UI.FormatTime(...,...,...)设置时间
UI.RecordOpenPanel (name) 有一个表用来记录专门去存放 已经打开的UI面板 记录打开的UI面板 UI面板的类型
UI.ClearRecordOpenPanel(name) 清理单个打开的UI面板 Name 清理 UI面板的类名
UI.CloseAllOpenPanel() 一次性 关闭 所有的已经打开的面板
Defiine .lua 脚本中 有接收消息的方法
发送消息的方式: Warn { Msg=_T'无法购买' }
Table中 的 Function中 降序 升序
_G.Item={} 中 Player 的金币点券 砖石 格子数 装备数 CD中剩余时间
_G.Redpoit 红点系统 基本上所有的方法都是通过 接口 来实现的
au.esc_btn.button.onClick = function( ) UI.showActivityui(false) end
框架中地显示隐藏是采用的 Active 来进行显示隐藏的 例如 CS.xxxName xxx=false CS.xxxNameXXX=true
Zone.lua是对游戏场景的一个加载 获取 显示
在UI.lua中 找UI面板的方式 通过__index 中去找 类型是否是string 类型 如果是string类型 因为 UI.showDepotUI(true) 是这样的方式
所以在找的时候看是不是 Show类型的 如果 是 就 从第 5个开始找 判断 后面的UI是不是你想要的UI 然后对他进行显示 和隐藏
local UIMeta={}
UIMeta.__index = function(tb, k)
local v=rawget(tb, k)
if v then return v; end
if type(k)=='string' then
if k:lead'show' then
local name = string.sub(k, 5)
if isui(name) then
-- if name == 'Dun_target' or name == 'dun_target' then
-- _wl( '#################' )
-- _wl( debug.traceback( ) )
-- _wl( '#################' )
-- end
return function(b, ...)
--_lj( 'showui<<<<<<<<<<<<<<<<', b, name )
if CLOSEALL then return end
UIManager:GetInstance():Show(name, b, ...)
end
end
end
end
end
Zone.GetZone().zoneinfo.zoneid 获取当前 场景的ID
Const.lua中 有 _G.Colors={ } 有 游戏中的原始方式的颜色 _g.ChatChannelColor={ } 世界 中门 区域 队伍
Define中 是所有的服务器接收的消息回调 然后我们通过 列如 Item.lua中 去接收数据的时候
------------------------------------------------Event
when{ _order=0 } --背包道具更
function BagUpAll(Info)
me.bag = Info ~= EMPTY and Info or { }
local ui = UI.getUI( 'BackpackUI' )
if not ui then return end
if ui.handSort then
ui.handSort = nil
Warn{ Msg = _T'背包整理成功' }
end
ui:selectUpTab( )
end
button.onClick
Zonerole .lua 中有对玩家数据的 配置
advancedlist.lua中 有对所有下拉列表的配置
GetIndexByRenderer()--获得某个格子当前显示第多少条数据
GetRendererAt()--获得第多少条数据对应哪个格子
Set()--选中第几个数据所在的格子,,需要在按钮的click里去设置
--[=[total是滚动列表需要显示的数据的总数,callback是刷新每个格子的回调函数,top是让滚动列表瞬间滚动到第几条数据对应的格子,同ScrollToIndex,top为nil的时候滚动列表待在以前的状态
callback需要符合如下格式:
function(r, index, cindex, selected)
local config = Cfg.cfg_item[self.items[index]];
local image = r.btn.image;
image.sprite = config.icon;
local choose = r.choose;
choose.active=(selected);
end]=]--
function AdvancedList.setData( self, total, callback, top )
Advancedlist.lua 中有roots 是有ScrollRect组件的那个transForm 是
SetData中 是个滚动裂变 需要显示数据的总数 Call back、
--[=[total是滚动列表需要显示的数据的总数,callback是刷新每个格子的回调函数,top是让滚动列表瞬间滚动到第几条数据对应的格子,同ScrollToIndex,top为nil的时候滚动列表待在以前的状态
callback需要符合如下格式:
function(r, index, cindex, selected)
local config = Cfg.cfg_item[self.items[index]];
local image = r.btn.image;
image.sprite = config.icon;
local choose = r.choose;
choose.active=(selected);
end]=]--
--每帧调用一次 及调用次数 较多
local rect = ui.recttransform
local flytime = 0self
local func = function(e)
flytime = flytime + 6*e
if flytime >= 1000 then
rect.anchX = endX
rect.anchY = endY
if self._timers[name] then
Timer.stop( name )
self._timers[name] = nil
self._flytb[name] = nil
if callback then callback() end
end
else
local temp = 1500*flytime - flytime*flytime/2
rect.anchX = stax + temp*ax
rect.anchY = stay + temp*ay
end
end
self:StartTimer(name,1,func)--调用次数较多时,即每帧调用
CreateRoleUI
GUIComponent.cs UI面板拖拽移动
倒计时的 的方式
if isstart then
c.go_btn.button.interactable = false
c.go_btn.btn_name.text.text = _T"即将开始"
self:ctrlTimer('activityshow',function()
local leftTime = timing*1000 - os.now(0)
local mst = mstr{_T"活动开启倒计时:<<<t>>>", t = toTimingFormat2(leftTime)}
c.hd_time.countdown.text.text = mst
if leftTime < 0 then -- 倒计时结束
self:Show(false)
-- self:HideWithEffect()
local ui = UI.getUI('MainUI')
if ui then
ui:activityOnShow()
end
return true
end
end)
---客户端的实现方法 时间对应
function CollectUI:OnIdle( e )
if self.begintime then
local dt = _now( ) - self.begintime
local t = Cfg.cfg_mine[self.id].casttime
if dt < t then
self.collectui.innercircle.image.fillAmount = dt/t
else
self.begintime = nil
self.collectui.innercircle.image.fillAmount = 0
end
end
end
function Cutdown:OnIdle( e )
self.time = e + self.time
if self.time > UpdateTime then
self.time = 0
self:Init()
end
end
table.sort( self.parts, table.asc( 'equiplvupnum' ) ) -- asc 按指定列升序