分享个踩坑的地方

测试环境:
cocos creator3.7.3版本,在安卓平台会卡退。网页端是正常的。

操作步骤:
节点上存在 Sprite 组件,并使用脚本挂载 Button 组件:
this.node.addComponent(Button);

测试内容:
在节点上注册按钮点击事件,在对应节点上的脚本上挂载 Button 组件。
// 获取按钮组件
this._button = this.node.getComponent(Button);
if (!this._button) this._button = this.node.addComponent(Button);
在网页端,小游戏平台跑是正常的。
如果这个节点上没有挂载 Sprite 组件。在安卓端也是能够运行的。

问题来了,如果这个节点上挂载了 Sprite 组件,按照上面挂载 Button 组件时,在网页端,小游戏平台跑是正常的。在安卓端直接卡退。报错日志如下:


反正我是看不出是为什么卡退的,在哪个点卡退出去。
在后面一一排查,测试。才找到这个原因:
Sprite 组件 和 Button 组件一起的时候会出,后面我继续尝试,注释掉挂载 Button 组件的代码。改为编辑器上直接挂载,结果是可以的,后面抱着试一试的想法,补齐了编辑器上的属性设置,也就是下面两行代码。
this._button.target = this.node;
this._button.transition = Button.Transition.NONE;
这才解决问题。
纯新人,入门小白。出问题真不好查错解决。

4赞

我真的没心情精力来处理cocos这些疑难杂症…

问题有点隐蔽…希望官方早日修复

感谢反馈,我们尝试复现一下

前面说的比较复杂。简单说就是:在节点上挂载了Sprite 组件,然后用脚本挂载Button 组件:
this.node.addComponent(Button);

打包安卓apk包会卡退。必须加下面两行代码:
this._button.target = this.node;
this._button.transition = Button.Transition.NONE;

个人遇到的问题和解决方案是这样,脚本挂载Button 组件文档是否有变更什么的,我已经看不过来了。

使用简单的方式,在 3.7.3 android 上测试是正常的,在一个已经有了 sprite 的组件上挂载了以下脚本:

import { _decorator, Component, Node, Button } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('Test')
export class Test extends Component {
   start() {
       this.addComponent(Button);
   }

   update(deltaTime: number) {
       
   }
}

这个问题可能不是能简单地复现,能提供比较完整的场景给我们么

确实,我将自己的项目删减大部分,也确实没有复现该BUG。可能是我自己的问题吧。