一 : 前景介绍

为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 : 处理函数的用户自定义的参数

Ⅱ : 设计界面
①,结构图如下

②,UI效果图如下

③,BTN不用设置Click Events(我们不用拖控件的方案)

Ⅲ:脚本编写

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

Ⅴ : 结果

转载于:https://blog.51cto.com/aonaufly/2350691

COCOS CREATOR(TS)之按钮事件相关推荐

  1. cocos android 剪切板,Cocos Creator 点击按钮复制到剪切版

    建一个ts文件,js文件不行,复制下面的代码,在场景中给button绑定事件 // Learn TypeScript: // - https://docs.cocos.com/creator/manu ...

  2. Cocos Creator 为Button添加事件的两种方法

    Button添加事件 Button 目前只支持 Click 事件,即当用户点击并释放 Button 时才会触发相应的回调函数. 通过脚本代码添加回调 方法一 这种方法添加的事件回调和使用编辑器添加的事 ...

  3. Cocos Creator 键盘监听事件

    键盘事件 键盘.设备重力传感器此类全局事件是通过函数 cc.systemEvent.on(type, callback, target) 注册的. cc.SystemEvent.EventType.K ...

  4. COCOS CREATOR(TS)相对坐标转世界坐标

    一 : 前言 这几天在Game中遇到这几个需求 , 发送订单后玩家的金币需要增加,这个时候需要做一个飞金币的效果.如下图所示: 二 : 问题 很明显按钮的父容器和金币信息所在的父容器不是同一个父容器. ...

  5. Cocos Creator中按钮组件数组的使用

    Cocos Creator游戏开发中经常使用到按钮,特别是大量按钮的情况,此时使用数组来管理这些按钮就显得更具通用性.我大致走了一下官方的示例,好像没有发现有这个小内容(或者有,但我却是没有找到),于 ...

  6. cocos creator 达达麻将(麒麟麻将)运行环境配置

    最近想研究下麻将游戏怎么做得,找了一些源码.发现一款达达麻将.前端,后台,以及数据库都是写好了的,可以一试. 由于本人是Android 开发,所以由此可见 ,运行源码的路程是多么的艰辛.... 不过历 ...

  7. 游戏开发-cocos creator技巧-cc.Component.EventHandler自定义click事件

    cocos creator有两种给按钮注册click事件的方式, EventHandler的方式虽然有点麻烦,但是比较灵活,使用时候注意每个参数必须填写正确,否则click时候会报null的错误 第一 ...

  8. 基于Cocos Creator 2.3.0,使用TypeScript(ts)实现微信跳一跳

    在看我这篇文章之前,首先您应该掌握一些基本知识,一是了解和使用cocos creator的常用控件,如Button,Label,Sprite等,脚本事件绑定等;Vscode的基本操作;TypeScri ...

  9. 【微信授权】cocos creator 3.6.1 微信头像 用户登录授权,微信昵称,用户授权按钮UserInfoButton 创建。

    cocos creator 微信头像,微信昵称获取,用户授权按钮显示.头像不显示问题解决,头像显示授权文字 注意,目前微信提供的api只能拿到用户头像和昵称,其余信息都没法拿到 如果你能够拿到的话,可 ...

  10. 【COCOS CREATOR 系列教程之二】脚本开发篇事件监听、常用函数等示例整合

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos-creator/1959.htm ...

最新文章

  1. [JS] 动态修改ckPlayer播放器宽度
  2. android开发模式,Android开发中无处不在的设计模式
  3. epoll的使用实例
  4. 在Java 7或更早版本中使用Java 8 Lambda表达式
  5. poj1284:欧拉函数+原根
  6. 为什么阿里巴巴建议集合初始化时,指定集合容量大小?
  7. oracle12c如何存档图片,Oracle Database 12c实用教程
  8. 万圣节后的早晨九数码游戏——双向广搜
  9. YYText识别链接和点击事件
  10. printf输出格式
  11. 苹果开售官翻iPhone XR机型 最多比新机便宜120美元
  12. 7z001怎么解压在安卓手机上面_安卓手机怎么可以远程阿里云服务器桌面
  13. 如何制作独一无二的简历?
  14. 加拿大PCI GXL地理成像加速器-地理国情大显身手
  15. GitHub 热点速览 Vol.32:VScode 韭菜基金插件,极大提高“工作”效率
  16. python用类名直接调用方法_一文读全 Python 的面向对象编程方法
  17. 每日记录 8.28 TP(真阳率) NP(假阳率) FP
  18. 在x86和arm编译libmodbus
  19. 理想二极管是什么意思,有什么特点
  20. 前端使用html2canvas插件进行截图

热门文章

  1. Spring-data-redis操作redis知识总结
  2. linux下rsync服务的搭建
  3. 《大道至简》最后两章读后感
  4. 以JTextPanel为例Swing的鼠标事件详解
  5. osgearth_backfill重采样生成低精度金字塔数据
  6. 关于windows server与SQL server用户数的解释 (转)
  7. flask开发restful api系列(7)-蓝图与项目结构
  8. 开源DataGridView扩展(6) 简单实现checkbox行选级联。
  9. window 平台高性能多国语解决方案
  10. pip常用命令、配置pip源