Cocos2dx&Lua - UI显示优化之如何解决解析大量json文件

GUIReader中有个widgetFromJsonFile的方法,此方法是用于解析json文件(cocostudio生成的UI的)并返回该文件的父节点(Widget),然后便于进一步的UI操作(如获得各种子类进行填充数据作显示等)。

那么这时候问题就来了,当需要在一个页面或一个控件(尤其是翻页、列表等)中,需要加载入大量的节点(均是由单独json解析得到的),这时,假如你要加入的子节点的json文件在10K左右以上,那么这种大量加载将会使手机非常痛苦(一个几K左右的,在加载数量达到50个左右时,就会卡住在2~3秒)。

所以,这里需要得到优化。

其实优化的思路蛮简单,首先找到问题:既然时间是花在解析大量json文件中,也就是说,这里的解析的json是与你当前需要显示的数据集合一一对应的,简单来说:造成卡的原因就是你有几个数据就解析几次json(很多人都会这样操作,因为他们把解析后的widget类直接进行数据填充)。这在之后得到优化之后你会觉得这是非常不应该的做法。

所以,我们很容易得到一个结论:要解除这种解析1个json文件后才能填充数据并进行被添加的绑定操作!

思路: 只解析当前页面(或控件,尤其是翻页)能显示的最少子节点数量(这在现在看来是必须的,因为同一个子节点只能有1个根节点),然后将解析后的节点(widget)统一放在某一数据结构中(队列或数组等按需自定);(这里要讲解一下:假如某游戏有一个十连抽招募功能,每次招募会在一个页面显示十张卡牌,这里的显示最优化就是这样:在登陆时加载10个卡牌的节点类放在一数据结构中,在每次招募过后,我们需解析接下来显示界面的json(这里不建议将十张静态加入这里,因为这样这个文件会变大,跟之前数据跟UI操作被绑定是一样的),所以这里每次显示都从那数据结构中遍历获取并填充数据加入页面中。优化过后,举个例子:这里假如一个玩家点十连抽10次,我只是解析了:1个页面的json
* 10 + 十张卡牌的json,而不是(1个页面json+十张卡牌json)*10);

后续我会写一些实现以帮助大家更好地理清这里的思路。

时间: 2024-07-31 14:32:20

Cocos2dx&Lua - UI显示优化之如何解决解析大量json文件的相关文章

ListView+Adapter适配器的使用与Listview常见的UI显示问题

一.ListView的事件: 1.setOnItemClickListener()点击事件 listview.setOnItemClickListener(new OnItemClickListener() {             @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {         

cocos2d-x + Lua接入iOS原生SDK的实现方案[转]

相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我做过项目中接入iOS原生SDK实现方案的一个总结,在这里分享给大家,希望对自己和大家的开发工作都有帮助. 在展开正文之前,先做几点说明: 1.我这里说的iOS原生SDK是指那些完全用Objective-C语言开发,为原生iOS程序设计的SDK.swift很好很强大,不过我还没用过,惭愧,不过语言终归

quick cocos2dx lua 内存释放

前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\docs\文件夹里面的文件,有相关api.学会学习的第一步,就是学会看api.好了,废话不多说,下面是和内存相关的地方. 但是在这里我不说具体再项目中怎么使用了,相信各位大神们一看就明白,有错误的地方,更好的,请大神们分享一下. 在项目的config.lua中有些调试信息的设置,这里简单说下. 在初

cocos2d-x+lua代码热加载(Hot Swap)的研究

代码热加载跟自动更新无关,主要目的是在程序运行的时候动态的替换代码,从而实现不重启程序而更新代码的目的.最理想的情况当然是我修改完代码并保存,然后就可以直接在游戏中看到修改后的效果,这个在实际开发过程中会大大提高效率. 即便达不到理想情况,我们也希望可以实现部分热加载,从而简化操作.例如我们可以仅仅对配置文件.消息文件.界面文件实现热加载,这样策划更新数据后可以直接在游戏中看结果,而不需要重新打开客户端去跑任务. 热加载主要原理其实很简单,lua require文件都会缓存在package.lo

[原创]cocos2d-x + Lua接入iOS原生SDK的实现方案

相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我做过项目中接入iOS原生SDK实现方案的一个总结,在这里分享给大家,希望对自己和大家的开发工作都有帮助. 在展开正文之前,先做几点说明: 1.我这里说的iOS原生SDK是指那些完全用Objective-C语言开发,为原生iOS程序设计的SDK.swift很好很强大,不过我还没用过,惭愧,不过语言终归

android内存优化4—对界面UI的优化(1)

在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多控件,控件会用到很多的资源.Android系统本身有很多的资源,包括各种各样的字符串.图片.动画.样式和布局等等,这些都可以在应用程序中直接使用.这样做的好处很多,既可以减少内存的使用,又可以减少部分工作量,也可以缩减程序安装包的大小. 下面从几个方面来介绍如何利用系统资源. 1)利用系统定义的id

将cocos2dx+lua创建的游戏port到windows phone

在整个Port的过程中遇到的问题总结如下 1.一定要使用最新版本的cocos2dx,原因大家看一下changelog就知道了,最近的cocos2dx版本都是在修windows phone上的bug,所以为了避免少出问题,还是直接升级到最新版本吧 2.如果你使用的是cocos2dx + lua方式,目前的project-creator并不支持lua版本的windows phone平台,但是cpp版本是支持的,因此我们可以在cpp版本的基础上把libcocoslua以及liblua两个工程加到项目中

Android UI性能优化详解

设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的app UI是简单还是复杂,重要的是性能一定要好. UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑这个问题.研究表明,0-100毫秒以内的延迟对人来说

cocos2d-x lua中实现异步加载纹理

原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的动画,在显示这个loading界面的时候加载资源,项目是用cocos2d-x lua实现的,界面做出来后发现在加载资源的时候界面会卡住. 原因: 因为使用的不是异步加载,而且cocos2d-x没有绑定异步加载资源的api到lua中,其实在lua中实现不了异步. 想通过在lua中启动一个线程去加载资源