基于Lua的UIListView列表控件的优化方法、系统、设备和介质技术方案

技术编号:33645228 阅读:18 留言:0更新日期:2022-06-02 20:21
本申请涉及一种基于Lua的UIListView列表控件的优化方法、系统、设备和介质,该方法包括:获取预置子项总数和各子项尺寸,创建空闲池子队列和使用池子队列,根据各子项的尺寸计算各子项在可视窗口的位置,检测到优化后的UIListView列表控件上发生移除子项事件时,将移出可视窗口的子项从使用池子队列移除,并将该移出可视窗口的子项加入空闲池子队列,其中,优化后的UIListView列表控件通过将LuaTableView控件扩展至原生UIListView列表控件得到,LuaTableView控件为基于Lua层通过UIScrollView控件继承父类Widget生成,对优化后的UIListView列表控件执行移除子项绘制操作,本申请不仅解决了父类不是Widget的问题,还减少内存消耗,适用于游戏中帮会成员列表、好友列表、背包等大数据显示,而且极大方便了业务逻辑开发使用。业务逻辑开发使用。业务逻辑开发使用。

【技术实现步骤摘要】
基于Lua的UIListView列表控件的优化方法、系统、设备和介质


[0001]本申请涉及列表控件
,特别是涉及一种基于Lua的UIListView列表控件的优化方法、系统、电子设备和存储介质。

技术介绍

[0002]CocosStudio编辑器是Cocos2dx引擎官方为了方便用户提供的游戏界面编辑器。UIListView是CocosStudio编辑器中的一种列表控件,采用纯C++代码实现,子项不复用,不可自定义子项尺寸。CCTableView是早期的Cocos2dx引擎内置列表控件,采用纯C++代码实现,子项复用,可自定义子项尺寸CCTableView这类Cocos2dx引擎早期内置控件共同父类为Node,UIListView这类CocosStudio编辑器系列的控件最终的父类也是Node,但是引擎官方在Node基础上封装了另一个Widget作为父类,对于CocosStudio编辑器系列的控件,在获取父类或者子类的时候都有使用C++关键字dynamic_cast转成Widget类型的操作,Node类型通过dynamic_cast转成Widget类型最终结果是空,后续事件传递的逻辑自然无法进行。因此CCTableView这类没有继承自Widget类型的控件与CocosStudio编辑器结合使用就会引起触摸事件传递缺陷。
[0003]目前针对相关技术中的游戏产品基于Cocos2dx+Lua引擎框架,脚本和资源实现热更新,在已经有广大用户,并且不能随意更换app底包,因为项目已经在线上,有很多渠道的合作方,假如修改了C++层,需要重新编译出包(即app),那么所有的渠道方都要换包,开发量巨大,但是目前的项目中发现UIListView对于子项复用和自定义子项尺寸的不足以及CCTableView与CocosStudio编辑器结合使用引起的触摸事件传递缺陷,以使游戏中帮会成员列表、好友列表、背包、聊天列表等大数据显示加载速度慢,从而导致用户交互体验感差的问题。

技术实现思路

[0004]本申请实施例提供了一种基于Lua的UIListView列表控件的优化方法、系统、设备和介质,以至少解决相关技术中应用UIListView子项复用低,内存消耗大,且在游戏中帮会成员列表、好友列表、背包等大数据显示加载速度慢,从而导致用户交互体验感差的问题。
[0005]第一方面,本申请实施例提供了一种基于Lua的UIListView列表控件的优化方法,所述方法包括以下步骤:
[0006]获取预置子项总数和各子项尺寸;
[0007]基于所述预置子项总数和预置各子项尺寸创建空闲池子队列和使用池子队列;
[0008]根据各子项的尺寸计算各子项在可视窗口的位置;
[0009]检测到优化后的UIListView列表控件上发生移除子项事件时,将移出可视窗口的子项从使用池子队列移除,并将该移出可视窗口的子项加入空闲池子队列,其中,所述优化后的UIListView列表控件通过将LuaTableView控件扩展至原生UIListView列表控件得到,
所述LuaTableView控件为基于Lua层通过UIScrollView控件继承父类Widget生成;
[0010]对所述优化后的UIListView列表控件执行移除子项绘制操作,其中,移除的子项为该移出可视窗口的子项。
[0011]在其中一些实施例中,所述根据各子项的尺寸计算各子项在可视窗口的位置之后,所述方法还包括:
[0012]检测到优化后的UIListView列表控件上发生移入子项事件时,获取空闲池子队列中的第一个子项对象;
[0013]将所述第一个子项对象加入使用池子队列;
[0014]对所述优化后的UIListView列表控件添加该第一个子项对象,并执行绘制子项操作,其中,所述绘制的子项为该第一个子项对象。
[0015]在其中一些实施例中,所述方法还包括:
[0016]若所述空闲池子队列中为空,则创建一个新的子项加入用池子队列。
[0017]在其中一些实施例中,所述方法还包括:在所述检测到优化后的UIListView列表控件的滚动事件结束后,回收使用池子队列中的所有子项。
[0018]在其中一些实施例中,所述使用池子队列和所述空闲池子队列为子项对象池。
[0019]在其中一些实施例中,在所述优化后的UIListView列表控件宽度固定的情况下,所述优化后的UIListView列表控件设于容器控件上,且所述容器控件的高度等于各子项高度之和。
[0020]在其中一些实施例中,所述子项至少包括文本子项和按钮子项。
[0021]第二方面,本申请实施例提供了一种基于Lua的UIListView列表控件的优化系统,其特征在于,所述系统包括:
[0022]获取模块,用于获取预置子项总数和各子项尺寸;
[0023]创建模块,用于基于所述预置子项总数和预置各子项尺寸创建空闲池子队列和使用池子队列;
[0024]计算模块,用于根据各子项的尺寸计算各子项在可视窗口的位置;
[0025]检测模块,用于检测到优化后的UIListView列表控件上发生移除子项事件时,将移出可视窗口的子项从使用池子队列移除,并将该移出可视窗口的子项加入空闲池子队列,其中,优化后的UIListView列表控件通过将LuaTableView控件扩展至原生UIListView列表控件得到,所述LuaTableView控件为基于Lua层通过UIScrollView控件继承父类Widget生成;
[0026]移除子项模块,用于对优化后的UIListView列表控件执行移除子项绘制操作,其中,移除的子项为该移出可视窗口的子项。
[0027]第三方面,本申请实施例提供了一种电子设备,所述电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序时实现如上述第一方面所述的基于Lua的UIListView列表控件的优化方法。
[0028]第四方面,本申请实施例提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行如上述第一方面所述的基于Lua的UIListView列表控件的优化方法。
[0029]基于上述内容,本实施例考虑到现有的技术中由于UIListView采用C++代码作为
编译型语言来实现,需先经过编译、链接过程,存在加载速度慢的问题,本实施例在不改变原有C++框架的情况下,在Lua脚本层通过优化后的UIListView列表控件实现子项复用以及自定义子项尺寸,采用Lua作为解释型语言,并不用任何的编译过程,可即开即用,便于移植、修改和复用,提高了加载速度;另一方面,通过Lua层仿照UIListView继承UIScrollView控件,解决父类不是Widget,导致CCTableView这类没有继承自Widget类型的控件与CocosStudio编辑器结合使用就会引起触摸事件本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Lua的UIListView列表控件的优化方法,其特征在于,所述方法包括:获取预置子项总数和各子项尺寸;基于所述预置子项总数和预置各子项尺寸创建空闲池子队列和使用池子队列;根据各子项的尺寸计算各子项在可视窗口的位置;检测到优化后的UIListView列表控件上发生移除子项事件时,将移出可视窗口的子项从使用池子队列移除,并将该移出可视窗口的子项加入空闲池子队列,其中,所述优化后的UIListView列表控件通过将LuaTableView控件扩展至原生UIListView列表控件得到,所述LuaTableView控件为基于Lua层通过UIScrollView控件继承父类Widget生成;对所述优化后的UIListView列表控件执行移除子项绘制操作,其中,移除的子项为该移出可视窗口的子项。2.根据权利要求1所述方法,其特征在于,所述根据各子项的尺寸计算各子项在可视窗口的位置之后,所述方法还包括:检测到优化后的UIListView列表控件上发生移入子项事件时,获取空闲池子队列中的第一个子项对象;将所述第一个子项对象加入使用池子队列;对所述优化后的UIListView列表控件添加该第一个子项对象,并执行绘制子项操作,其中,所述绘制的子项为该第一个子项对象。3.根据权利要求2所述方法,其特征在于,所述方法还包括:若所述空闲池子队列中为空,则创建一个新的子项加入用池子队列。4.根据权利要求1所述方法,其特征在于,所述方法还包括:在所述检测到优化后的UIListView列表控件的滚动事件结束后,回收使用池子队列中的所有子项。5.根据权利要求1所述方法,其特征在于,所述使用池子队列和所述空闲池子队列为子项对象池。6.根据权利要求1所述方法,其...

【专利技术属性】
技术研发人员:伍仁堆
申请(专利权)人:厦门游动网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1