关于cc.Button的绯闻

cc.Button介绍:
image

原cc.Button需要指定Target,这里指定的target是button的子节点Background。

好的暂时介绍到这里,下面我们对比2个结果。
1、我们设置target为子节点的时候,设置按钮zoomScale是0.6的时候我们可以正常点击按钮的边缘,这时缩放后的点击是有效点击。如下图所示
Kapture 2024-05-23 at 20.52.06
2、当我们设置target为当前节点时,点击边缘被缩放后却不是有效点击,如下图所示。
Kapture 2024-05-23 at 20.55.03

抛出问题:
target为当前节点时,点击被缩放,缩放后判定点中无效。

从源码查找答案:
image

问题原因:
target为子节点时,当前node未缩放,所以this.node._hitTest无影响;当前节点被缩放后this.node._hitTest受影响。

狗仔队继续追(_hitTest源码):
image

矩阵操作,嗯。。。看不懂。。。。

那么来看另一段代码:
image

是巧合还是异曲同工?

得出结论:_hitTest是转化为节点坐标之后判断的是否点中

再次抛出问题:节点缩放后,世界坐标转化为此节点坐标后的将如何?
这个悬念留给看官吧!

肯定是对节点坐标有影响。

那么我们通过从写_hitTest就可以解决这个问题,代码如下:
image

好就这样吧!

哈哈哈哈,看起来就是 没有考虑节点缩放导致的 BUG咯?

深度使用就感觉每个系统自带的组件都要重写…
layout,列表,按钮,富文本,mask,audio…基本要深入使用都得自己搞一个 :rofl:

是的,引擎只能做到基本上的,如果 业务逻辑需要深入的一些功能,最好还是自己定制

不能说是bug吧,人家就是这么设计的

image
都是坐标转换的过程吧。
屏幕坐标=>世界坐标=>本地坐标。
其中世界坐标到本地坐标,使用的是一个逆矩阵运算。【坐标旋转缩放】

是的。跟convertoToNodeSpaceAr一样的代码