美文网首页
2021-06-17 现项目组框架理解用法

2021-06-17 现项目组框架理解用法

作者: 我家菇凉 | 来源:发表于2021-06-17 12:07 被阅读0次

    基本的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 按指定列升序

    相关文章

      网友评论

          本文标题:2021-06-17 现项目组框架理解用法

          本文链接:https://www.haomeiwen.com/subject/xyaqyltx.html