-
Creator 版本: 3.8.1
-
目标平台: 微信
-
重现方式:打包到微信后,运行游戏一段时间,大概5-10分钟左右,可重现问题。只有微信有此问题,webmobile无法重现此问题。
-
首个报错:
MiniProgramErrorCannot read properties of null (reading’atlasName’)TypeError: Cannot read properties of null(reading ‘atlasName’)at e.-multilineTextWrap (game.js:23:251890)at e._alignText (game.js:23:250459)at e.processingString (game.js:23:240977)at Object.updateRenderData (game.js:23:258606)at i.updateRenderer (game.js:23:107060)at e.updateAllDirtyRenderers (game.js:21:857484)at i.tick (game.js:21:868027)at r._updateCallback (game.is:21:891334)at Function.-updateCallback (game.js:21:870692)at Function.
(WAGameSubContext.js:1:213705) -
之前哪个版本是正常的: 不确定
-
手机型号: 无论手机
-
手机浏览器: 微信小游戏
-
编辑器操作系统: vs code
-
重现概率: 微信100%,其他平台未能重现
出现卡死后,在cocos源码中定位到是
cocos/2d/assembler/label/text-processing.ts
中的_multilineTextWrap方法中有一段错误输出:
letterDef = shareLabelInfo.fontAtlas!.getLetterDefinitionForChar(character, shareLabelInfo);
if (!letterDef) {
this._recordPlaceholderInfo(letterIndex, character);
log(Can't find letter definition in texture atlas ${ style.fntConfig!.atlasName} for letter:${character});
continue;
}
其中的atlasName所属的style.fntConfig为null导致的,在打出的微信包中将此句报错改为Can't find letter definition in texture atlas for letter:${character}
可解决卡死问题,但会报错输出这句日志,日志中可看出部分文字无法再正常显示,都是非常常用数字等,且刚开始能正常显示的文字。
从堆栈源头看是updateAllDirtyRenderers方法导致,项目中的确用了很多label是使用char缓存模式,怀疑是这个缓存模式的问题,导致生成的临时图集不存在了?或者被回收了?但web mobile和预览无法复现此问题。


