COCOS CREATOR(TS)之按钮事件
admin
2023-02-16 18:20:04
0

一 : 前景介绍

为cc.Button添加事件的方法有很多种 , 本篇只讲解使用cc.Component.EventHandler的方法.因为此方案有一个最大的有点 : 可以获得cc.Event.EventTouch.但是此方案,相比如控件拖动方案要复杂一些,所以给出此Blog予以详解

二 : 详解

Ⅰ: 构建cc.Component.EventHandler对象

export class ClickEvent2CreatTool{
    private static _instance : ClickEvent2CreatTool = null;
    public static get Instance() : ClickEvent2CreatTool{
        if( !ClickEvent2CreatTool._instance ){
            ClickEvent2CreatTool._instance = new ClickEvent2CreatTool();
        }
        return ClickEvent2CreatTool._instance;
    }

    public create( $node : cc.Node , $component : string , $handler : string , $param : any ) : cc.Component.EventHandler{
        let $event : cc.Component.EventHandler = new cc.Component.EventHandler();
        $event.target = $node;
        $event.component = $component;
        $event.handler = $handler;
        if( $param )
            $event.customEventData = $param;
        return $event;
    }
}

PS create参数 :
①-> $node : 放置脚本的cc.Node
②-> $component : 脚本的名称
③-> $handler : 脚本中为事件处理的函数
④-> $param : 处理函数的用户自定义的参数

Ⅱ : 设计界面
①,结构图如下
COCOS CREATOR(TS)之按钮事件
②,UI效果图如下
COCOS CREATOR(TS)之按钮事件
③,BTN不用设置Click Events(我们不用拖控件的方案)
COCOS CREATOR(TS)之按钮事件
Ⅲ:脚本编写

import {ClickEvent2CreatTool} from "../tool/ClickEvent2CreatTool";

const {ccclass, property} = cc._decorator;

@ccclass
export default class MainMenu extends cc.Component {

    @property(cc.Button)
    btn_map: cc.Button = null;

    @property(cc.Button)
    btn_building : cc.Button = null;

    @property(cc.Button)
    btn_menu : cc.Button = null;

    private listener2Btn( $isAdd : boolean ) : void{
        if( $isAdd ){
            this.btn_map.clickEvents.push(ClickEvent2CreatTool.Instance.create( this.node , "MainMenu" , "clickHandler" , this.btn_map ));
            this.btn_building.clickEvents.push(ClickEvent2CreatTool.Instance.create( this.node , "MainMenu" , "clickHandler" , this.btn_building ));
            this.btn_menu.clickEvents.push(ClickEvent2CreatTool.Instance.create( this.node , "MainMenu" , "clickHandler" , this.btn_menu ));
        }else{
            this.btn_map.clickEvents.shift();
            this.btn_building.clickEvents.shift();
            this.btn_menu.clickEvents.shift();
        }
    }
    clickHandler( $event : cc.Event.EventTouch, $customEventData : any ) : void{
        switch( $customEventData ){
            case this.btn_map:
                console.log("map click");
                break;
            case this.btn_building:
                console.log("building click");
                break;
            case this.btn_menu:
                console.log("menu click");
                break;
        }
    }

    start () : void {
        this.listener2Btn( true );
    }

    onDestroy() : void{
        this.listener2Btn( false );
    }
}

PS create参数:
①-> this.node 既是UI中的MainMenu节点 , 这个节点会绑定此脚本
②-> MainMenu 脚本的文件名称
③-> clickHandler 脚本中clickHandler方法为Event处理方法
④-> this.btnmap 自定义的参数

Ⅳ : 在UI中使MainMenu节点绑定脚本MainMenu
COCOS CREATOR(TS)之按钮事件
Ⅴ : 结果
COCOS CREATOR(TS)之按钮事件

相关内容

热门资讯

尺素金声|中国经济“失速论”站... 一季度GDP同比增长5.0%、二季度增长4.3%、上半年增长4.7%,2026年中国经济半年报发布后...
NVIDIA最深的护城河要凉!... 7月24日消息,AMD在Advancing AI预简报会上表示,CUDA已不再是外界想象中的那条护城...
廖杰远:三大智能体协同闭环,A... 中国日报网7月24日电 7月22日,在2026年世界互联网大会数字丝路发展论坛数智健康分论坛上,微医...
AI时代构筑超级底座 维谛技术... 文/本报记者 当前,人工智能产业竞争持续向产业链上游延伸,算力竞争早已不再局限于计算芯片性能比拼。具...
刚签核协议不到24小时,美国突... 美国东部时间7月22日下午,美国宣布与沙特阿拉伯签署了一项民用核能协议。据美国有线电视新闻网(CNN...
中国信通院牵头,数据编织国际标... IT之家 7 月 24 日消息,中国信通院今日发文称,国际电信联盟第 21 研究组(ITU-T SG...
国内首颗商业空间碎片监测卫星发... 【国内首颗商业空间碎片监测卫星发射成功】《科创板日报》24日讯,7月24日上午,中科宇航力箭一号运载...
邓煜,诗人,数学家,老二次元 来源 视觉中国菲尔兹奖的通知邮件抵达时,普林斯顿大学数学博士、芝加哥大学数学系教授邓煜正在看一本恋爱...
安全生产许可证状态不是“有效”... 工程公司的安全生产许可证在官方系统显示为“其他”状态,有一栏则显示“整改”,却成为高标准农田项目的第...
深化产教融合 推进数智育人 哈... 7月23日,由阿里国际人工智能人才孵化中心(以下简称“阿里国际AITIC”)主办的“智启未来·数智赋...