ListView循环列表用法
大佬给过好评并推荐使用的列表工具
可能我所展示的也是部分用法,勿喷
引言:当列表遇到性能瓶颈
经典问题场景:
- 500+物品的背包界面卡顿
- 无限滚动的排行榜FPS暴跌
- 聊天记录滑动时出现"白屏闪动"
传统方案缺陷:
cc.Node实例爆炸式增长 → 内存占用飙升 → 渲染性能断崖式下跌
性能对比数据:
方案 | 1000项内存占用 | 滚动FPS |
---|---|---|
普通列表 | 38MB | 12 |
虚拟列表工具 | 6.2MB | 58 |
一、虚拟列表核心原理
1.1 空间换时间的艺术
// 可视区域示意图
+---------------------+
| 可见区域 (Viewport) | ← 只渲染这里面的元素
+---------------------+
▲ ▼
缓冲区 缓冲区`
1.2 关键技术实现
- 动态渲染:根据滚动位置计算可见索引
- 位置预测:基于项尺寸预估总高度
- 节点复用池:循环使用10-20个节点实例
1.3 性能优势
- 内存占用减少90%+(节点复用)
- GPU绘制调用(Draw Call)降低70%
- 避免无意义的布局计算
二、工具使用指南
-
在脚本文件导入listView文件
-
找到使用该组件的滚动视图,添加组件List,如下图:
-
tmpNode内拖入视图内将要循环的节点
-
第一个把预制体拖进去,第二个选择预制体名字,第三个是脚本文件内写的方法
-
此时这里就可以选择相应添加组件List的滚动视图
-
this.list.numItems 设置刷新的个数
-
tnode为上述tmpNode拖入的节点,idx 为当前是虚拟列表的第几个
三、常见误区
- 需注意目标节点的定位原点,如使用不正确,则会导致目标节点不会出现,甚至不会滑动等问题。
四、结语
工具地址如下
gitee地址:https://gitee.com/hou-lifeng/tools/tree/master/listView