今天遇到一个问题,游戏的邮件系统,有两个体验非常不好的地方。
1,第一种解决方案:打开邮件详情,会看到上次残留的数据,然后刷新成新的。
2,第二种解决方案:关闭邮件详情界面,回到邮件列表,会闪一下空白板子,然后刷新出邮件列表。
第一个问题:
这个问题很好解决,因为所有的邮件公用,一个详情的面板。
1,每次关闭板子的时候。清空组件里面填充的内容
2,默认组件是隐藏的,收到内容再显示出来,填充数据
第二个问题:
为什么会闪一下。一般滚动层,没有优化的,就是收到数据之后,清空然后重新添加。
我以为闪一下是因为,清空上次残留。添加新的导致的。不得不说如果心里认定了一件事,基本上想找到根本原因很难了。
事实证明我是错得:
1,清空操作,都是在收到新的数据之后,添加新的组件之前,才会做的操作,清空完后立马执行添加组件。
2,我们之所以,能看到屏幕的图片,是引擎每帧都在 draw , 间隔时间很短,人眼睛分辨不出来,就以为这东西是一直存在的。大部分游戏是30帧,就是一秒刷新30次,1000/30 = 33毫秒刷新一次。
3,draw 方法是根据,当前的节点数进行绘制的。也就是说,在一个的间隔内,你的逻辑 添加100个节点,然后又删除100个节点,在下次执行draw方法的时候,还是什么都不会绘制。 而1的方法,是在一个帧内的,肯定不会出现闪一下空白,然后又刷出来的表现样式。后来发现因为把 邮件列表scroll 隐藏的原因。
4,如果前端显示,看到闪一下。原因就是:像服务请求数据的时候就切换了界面,而不是收到协议之后才切换的界面。导致这是两帧里面的逻辑,所以会闪一下,用户体验非常不好。正确做法:都要收到服务器协议之后,再去切换界面。
说一下卡顿的两种情况?
1,理论人眼有一个0.1秒的视觉延迟,所以通常每秒刷新10次以上就可以了。但实际情况是每秒刷新24次以上时人眼才会分辨不出来,就可以看到连续的画面了。
2,游戏的帧数一般都是经过处理的,比如有两帧,每帧33毫秒,第一帧执行了60毫秒(肯能是本帧内处理的逻辑太多),那下一帧可能只有3毫秒,就会出现掉帧,造成卡顿的感觉。
3,如果一帧内处理的逻辑太多,也会造成卡顿,原因同上。这时候最简单的的改法就是。延迟执行一部分逻辑。(延迟执行可利用cocos提供的动作回调的功能实现)