修复官方button的一个bug,附修复后的源码,请官方入内一看

bug描述,按钮的transtion为scale, 在点击一个按钮后马上隐藏该按钮,再显示这个按钮的时候,按钮的scale形变会变形。

经过查找,发现是resetState里,图1所示,必须有renderable2D这个comp才可以,但实际上,scale形变并不需要判断这个comp,我改成图2所示就可以了。我不知道怎么提fix issue,就在论坛里说了吧,就挪一下代码位置就行。希望官方修复这个bug以后,可以回复一下在哪个版本可以实现。

其实第671行也应该挪到前面654行处,但与我之前遇到的bug无关,所以就没改。

你好,你测试的版本是哪个版本?
按照你上面描述的步骤测试没复现,测试的版本是3.2.0,3.1.1;
不确定是不是少了什么关键性代码或一些设置,方便的话可以提供个简单的 demo 嘛?

版本3.1.1,测试方案很简单,button节点的target节点上没有类似sprite或者label之类的renderable2D节点,那么resetState函数里就会return,导致后面的逻辑没执行。但是这种情况很常见的,比如我一个父节点只添加button组件,target是自己,然后其他的渲染组件,比如sprite,label都在子节点里。那么这个button就resetState函数运行就会有问题。

测试还是没有复现,不知道是不是少了什么设置,节点树:
image
测试demo:testBmFont.zip (8.6 KB)

1赞

你创建一个node直接添加button组建是无法使用的。这是bug吧

怎么会无法使用呢??一个没有render组件的node也完全可以作为一个button的呀

assets.zip (5.2 KB)

我用你的方案改了一下,你运行一下,首先,点击图片,会放大button,这瞬间button的node active为false,然后点击canvas,这时会让button的node active重新为true,这时候,button的scale会形变闪一下。 在小型的button里不明显,但是如果button节点是很大的,而且是那种好几个在一起排列整齐的,这时候的形变就显得很丑。

一定要通过点击button来关闭button,不可以通过点击canvas来关闭button。你之前的例子里,button的node都没形变,用定时器是很难复现出来的

同样的例子,如果在节点A加一个空的sprite节点,那么resetState函数里就不会return,那么显示才是正确的!

已反馈,给你们带来的不便,感到非常抱歉!

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。