【正式版本已发布】 Cocos Creator 3.8.4 社区公测帖

3.8.4派发触摸事件的时候新加了这一行导致的,之前的版本都没有做这种处理,不清楚为什么这么做,注释掉应该能解决你的问题

1赞

请问预估是这几天发布3.8.4正式版吗?

这里的修改和上面说的问题没影响。这里的意思是,当 touch start 事件来时,可能会有多个节点监听并处理了它,然后这些节点就会一直等着处理对应的 touch end 消息。当 touch end 消息被处理后,就不应该继续留着,否则会干扰后续的事件处理。

因为测试资源问题,最近才测试完第一轮。还会测第二轮。顺利的话,这个月底会发。

1赞

插件系统完善会在哪个版本

编辑器目前的重点是性能和稳定性。你说的插件系统可以建个单独的帖子说出你遇到的问题,或者你觉得存在的问题。我们搜集完需求后再考虑。

EditBox 的一些问题,请问考虑修一下嘛?EditBox 删除cc.Sprite 组件会自动添加,要不支持删除要不支持padding 总得有一个吧?另外子Label 组件修改scale 和大小也会被还原。想调调位置也不行么。。

怎么重现?有问题的话,下个版本会修复。这个版本不会再修复了,否则就没法发布了。

他说的问题我之前遇到过,刚刚又试了下,确实是这里注释掉就可以正常处理,复现也很简单,就是一个Node监听touch事件,然后下面放一个按钮,按钮改成Scale模式比较容易看到,在TouchStart的时候eventTouch.preventSwallow = true;这样按钮可以接收到TouchStart事件,按钮变大,但是在TouchEnd时优先级高的处理后把后面的需要处理的touchId都清理了,就算上面Node的touchEnd中设置了eventTouch.preventSwallow = true; 按钮也不会接收到TouchEnd事件,按钮就一直是放大状态,也不会触发点击事件,感觉如果这么做的话TouchStart中的preventSwallow就没有什么意义了,是否考虑在TouchEnd时也通过eventTouch.preventSwallow = true;区分一下是否要清理掉后面的touch事件呢

但是 preventSwallow 在 touch start 时被 reset 了,我暂时还没分析为什么。但是如果把这里代码注释掉,又遇到了这个问题 Click Callback Exception · Issue #13542 · cocos/cocos-engine · GitHub

另外,之前的修改代码有问题,touch id 传错了,会带来一些问题。https://github.com/cocos/cocos-engine/pull/17546 修复了。

哦哦,被 reset 的是 touch start 消息,根据 touch end 或者 touch cancel 去判断是否 preventSwallow 应该是可以的。

我的意思是不是直接注释掉,而是让使用者自己选择,只有在处理当前节点TouchEnd和Cancel事件是preventSwallow == true的情况,才让事件继续传递,到了按钮这一层处理过点击事件后preventSwallow已经被重置了,后面的再清理掉,这样感觉更合理一些,至于你发的这个,因为我平时都是Touch事件成对处理的,一般会处理TouchEnd的事件都有TouchStart,所以可能不会遇到这个问题

嗯嗯,这样是可行的。我对于 preventSwallow 其实也是有疑惑的。本来应该是通过 handleEventTouch,通过返回值就可以决定是否吞掉消息,现在又有个 preventSwallow 变量,确实比较奇怪。

这玩意能不能多加2个参数 现在不太够用 ,老是要拼接

昨天遇到个很麻烦的问题,之前的3.8.5和3.8.3都没出现过,2D项目,原生端的node.setPosition后 position 和 worldPosition不同步,导致的渲染出来的效果和实际上有区别,而且不容易复现,

image

上面是出错之后断点的信息,这个节点是在屏幕中心点偏上的位置,按道理说 worldPosition的x 应该是 1350/2 左右,但是实际上是没修改position之前的值。暂时查到是 node的globalFlagChangeVersion不匹配导致的,比如globalFlagChangeVersion == 1的时候修改了位置,globalFlagChangeVersion = 2的时候子节点渲染的时候globalFlagChangeVersion已经变了,导致node->getChangedFlags()是0,也就不会去刷新位置,没有能复现的demo,都是发生在处理网络消息的时候批量刷新节点位置,想问下这个版本有做什么修改,可能会导致这个问题吗?越是卡顿的机器越容易出现

2赞

我提交修复了 https://github.com/cocos/cocos-engine/pull/17548 。我测试了是没问题,你也帮忙 review 一下。谢谢。

这个我们得看一下修改记录。

试了下,应该是没有问题的

设置 position 相关的代码贴一下看看。我不清楚是否和这个有关:注意:Node 的一些 set 接口行为的修正 。但从你的描述来看时间点对不上。那个修改是之前的 3.8.5 版本就带上了。

应该不是,问题应该是出现在C++这里,脚本那边已经过了,不像是用法不对,只会在控制台调用代码或者是网络消息处理的时候修改位置才有可能出现,同样的代码加到按钮的点击回调里面不会有问题,我再去加些日志看看吧,能找到问题就跟着升级,找不到只能降回去了 :sweat_smile: