-
Creator 版本:3.8.7
-
目标平台: 浏览器,editor 都会
-
重现方式:新建一个场景,添加多层node 节点,最后的node 上添加一个spine 动画,最上层的父节点开始设置透明度为0, 延迟几帧后慢慢渐变到 255, 发现再延迟的几帧后,第一次从0到x 的过程spine 会闪现一次
-
重现概率: 必现

skeleton 更新的时候获取直接的父节点的透明度是1, 但是父节点的父节点的透明度是0,起始渲染的时候导致skeleton的透明度计算是1,所以出现了一帧,第二帧skeleton 直接父节点的透明度就被更新到最新的,所以就开始慢慢的渐变透明显示。怎么解决有没有大佬遇到类似问题?
我怎么记得3.8.6修过这个bug
就这个描述看可能和 github 上的一些 issue 是一样的问题,比如 https://github.com/cocos/cocos-engine/issues/18123
解决思路大概就是在需要的时候强制更新一下 opacity 吧,引擎代码有这样的问题我们其实没什么好办法
目前暴力的改法就是递归计算父节点的透明度,有没有更好的解法?
有个简单方法就是先隐藏(不管是移出屏幕还是缩放什么的)然后下一帧再恢复
可以参考batch2d.cpp中修复UI的opacity逻辑,将spine的透明度也重新填入,不过要改挺多东西的
首次我看官方给了一个方案,就是默认透明度为0,第一帧不渲染,这样首次active没问题,之后如果强行改为0,又会出现
换成sprite,然后改color的透明度试试?
这里的透明度每帧都是从根节点传下来的,不显示的不用更新透明度
但是不更新,孙子节点的spine如何计算透明度?
是每帧都传下去,但是当根节点或者中间某个父节点设置为0后,到它这里就中断了,子节点不会立即更新透明为0,假设从0-1渐变过来,spine 的透明度又计算依赖于“直接父节点”透明度的值,“直接父节点”因为他的父节点透明度为0 ,停止传递后没有被修改为0,导致第一帧直接完全显示出来了,
问题就是这里,需要将spine读取的透明度改为和普通渲染组件一样,用从祖先节点传下来的透明度
是的,额外咨询个问题,就是游戏在浏览器中流畅度可以,包括在手机浏览器都很流畅,但是在android 原生上就至少要卡一倍,而且手机也很容易发烫,用手机浏览器不感觉发烫,这块是有什么优化思路吗?



