cocos creator Label 文本过多报错
类似用户协议、隐私条款等带有法律的词条文本数量上千行
当时这么写的
let labelNode = new Node('labelNode')
let label = labelNode.addComponent(Label)
label.cacheMode = Label.CacheMode.CHAR
label.string = '....' //上千条字符
这样可以一下加载出来,可关闭这的协议,加载其他协议时,就会报 font size 太长错误
折腾好久,这的字符太长不能让它保留缓存,把 cacheMode 改成 none,可就算none 也不能加载这么多,干脆就分了几段写
let a1 = ""
let a2 = ""
let a3 = ""
this.addLabel('a1', 0, a1)
this.addLabel('a2', -2000, a2)
this.addLabel('a3', -4000, a3)
addLabel(name:string, y: number, text:string){
let labelNode = new Node(name)
labelNode.layer = Layers.BitMask.UI_2D
labelNode.setPosition(0, y)
let label = labelNode.addComponent(Label)
label.cacheMode = Label.CacheMode.NONE
label.string = text
this.node.addChild(labelNode)
}
这样一下全部加载低性能手机可能会卡,得由 scroll 滚动事件触底,再加载下一段文本
scrollView 事件
@property(ScrollView)
scrollView: ScrollView = null!
// scroll-to-bottom 滚动差不多到底,有个回弹动画,回弹动画不触发此事件,有回弹后再滚动到底就会触发,或者直接滚到底
// bounce-bottom 触底就会有反应
this.scrollView.node.on('bounce-bottom', this.onScrollEvent,this)
onScrollEvent(scroll: ScrollView){
}
还是报错
多少 和 label 缓存设置有关
cacheMode 的 NODE 和 BITMAP 给定 宽度时不会自动换行,文本超出 节点
将 cacheMode 改成 CHAR 就会自动换行,如果文本太多改小字体
CHAR 模式会将每个文本生成位图,位图最大 2048 * 2048 超过就会出错,每个字体越小,生成总的位图容量就会越小