垃圾引擎 用了几天 到处都是bug

文档和脚本根本对不上,按照文档你根本别想做个东西出来

能说一下用到引擎版本和遇到的问题吗?文档哪一部分有问题?

之前有个叫@kingbook的

官方文档 这样写 传参 toggle

@ccclass("example")
export class example extends Component {
    onLoad(){
        const checkEventHandler = new EventHandler();
        checkEventHandler.target = this.node; //这个 node 节点是你的事件处理代码组件所属的节点
        checkEventHandler.component = 'example';//这个是脚本类名
        checkEventHandler.handler = 'callback';
        checkEventHandler.customEventData = 'foobar';

        const toggle = this.node.getComponent(ToggleComponent);
        toggle.checkEvents.push(checkEventHandler);
    }

    callback(event: Event, customEventData: string){
        //这里 event 是一个 Touch Event 对象,你可以通过 event.target 取到事件的发送节点
        // 这里的 customEventData 参数就等于之前设置的 'foobar'
    }
}

我的

let checkEventHandler = new EventHandler();

            checkEventHandler.target = t.view[`btn_carrer${i}`];

            checkEventHandler.component = 'CreateRoleUICtrl';

            checkEventHandler.handler = 'careerToggleCallback';

            checkEventHandler.customEventData = `${i}`;

            //checkEventHandler._componentId="cc.Toggle";

            let toggle =  t.view[`btn_carrer${i}`].getComponent(Toggle);

            toggle.checkEvents.push(checkEventHandler);

源码

 public emit (params: any[]) {
        const target = this.target;
        if (!legacyCC.isValid(target)) { return; }

        this._genCompIdIfNeeded();
        const compType = legacyCC.js.getClassById(this._componentId);

        const comp = target!.getComponent(compType);
        if (!legacyCC.isValid(comp)) { return; }

        const handler = comp![this.handler];
        if (typeof (handler) !== 'function') { return; }

        if (this.customEventData != null && this.customEventData !== '') {
            params = params.slice();
            params.push(this.customEventData);
        }

        handler.apply(comp, params);
    }

到这里 const compType = legacyCC.js.getClassById(this._componentId); 直接 return了 根本不能自定义传参 这只是个例

大哥 你贴出来的这段代码 不是有个判断才return的吗 if (!legacyCC.isValid(comp)) { return; }

你这样说我的话,怀疑他的节点上根本没有toggle

没toggle的话这行代码应该会报错 toggle.checkEvents.push(checkEventHandler);
我怀疑他脚本名或回调函数名搞错了或者target错了

toggle.node.on(Toggle.EventType.TOGGLE, callback, thisObj);
直接这样写吧,然后在回调函数里处理触发逻辑,好定位问题点

有bug就描述bug 没必要骂引擎吧。 盲猜是用法不对, 低级错误而已。 :rofl:

有bug就描述bug 言语攻击就没必要了吧,又不欠你的,不好用就自己重写一个

谢谢反馈,已转发给文档同学,需要把示例进行优化或者内容补充

:thinking:3.x 是不是什么时候有个里程碑版本,功能和画面表现力到一定程度以后开始完善稳定性、性能和文档之类的

更新:目前计划使用 3.8 作为稳定版。

再差也做了egret开发4年 laya2年 调试源码还是会的 你们只是没碰到复杂的应用场景

creator确实只适合策划搞搞拖拉拽的小游戏 对大型游戏 程序代码开发很不友好

demo方便传一下

那个event handler 好像是真的有bug, 我在3.6.x时如果按官方文档做是没反应的
后来我是这様写才生效, 麻烦官方查一下

    const scrollViewEventHandler = new EventHandler();
    scrollViewEventHandler.target = this.node; // 这个 node 节点是你的事件处理代码组件所属的节点
    scrollViewEventHandler.component = 'example';// 这个是脚本类名
    //======================================
    //由于componet 不是一个get/set 方法,但_componentName却是,利用ta生成component id 才能绑定到EventHandler中
    scrollViewEventHandler._componentName = 'example';
    //======================================
    scrollViewEventHandler.handler = 'callback';
    scrollViewEventHandler.customEventData = 'foobar';

哪些复杂的应用场景,哪里写代码不好你倒是描述一下啊,正好@一下官方人员

官方没问题的,我试了下,是你这里写错了
image
这里的target不是指向这些btn,而是要指向你现在这个脚本自身节点,就是target=this.node

看来大伙应该都不会采用如此麻烦且糟糕的方式来添加事件吧 :rofl:

1赞

这下打脸了