Cocos creater事件响应

本文详细介绍了Cocos Creator游戏引擎中的触摸事件和键盘事件的使用方法,包括如何监听和移除事件,以及自定义事件的派发方式。

Cocos creater事件响应

一、事件响应

1.触摸事件:

在cocos creater游戏引擎中我们通常都会用到button组件,button组件主要就是用来实现触摸事件的相关功能响应,而button组件实际就是用到了cc.Touch相关的触摸事件,触摸事件一共有四种:

cc.Node.EventType.TOUCH_START() // 按下时事件
cc.Node.EventType.TOUCH_MOVE// 按住移动后事件
cc.Node.EventType.TOUCH_END // 按下后松开后事件
cc.Node.EventType.TOUCH_CANCEL // 按下取消事件

我们直接上个例子看看它们是如何实现相关功能:

在这里我们直接使用on来监听当前节点的事件响应,on监听事件上有四个参数,第一个参数就是监听的事件类型,第二参数是事件监听后产生的回调函数它的实质是Event.EventCustom中的一个实例,第三个参数就是指将这个监听事件所绑定的节点,这里this就是是指这个所挂载的节点,第四个参数是一个Boolean值它是指在侦听器将在捕获阶段被触发,默认为true所以不写。第二个函数中参数t就是回掉后返回的一个touch触摸信息(所以等下我们就能用它来做一些相关的事情,这里暂时放一边)

 

Ok,创建一个白色的sprite来挂载并开始运行这段代码

运行成功,这里可以看到当我在点击这个白色箱子时star事件就被触发,我在箱子里面点击进行移动的时候move便被触发,最后我在箱子内部弹起鼠标点击后end就被触发,如果是在箱子外面(节点外部)弹其鼠标的时候就会触发cancel事件,这就是简单的触摸事件。

这里面要知道的是我们的触摸是事件是一种向上传递的冒泡事件,冒泡事件就是说如果我在一个子节点产生了触摸,那么这个子节点的父亲节点也能通过监听来接收到这个事件,像水中的泡泡一样会把事件向上传递给包含这个子节点的上层节点,那如果想要阻止事件冒泡就可以通过stopPropagationImmediate()来截断它的向上传递,在这里就需要用到返回的这个touch事件来调用:

然后我们继续通过这个touch来做一些事情,比如实现这个白色箱子的移动,这里就要调用touch中的getDelta()

Ok,那我们就可以实现随意的拖动这个方块了运行看看吧。

 

除了这个函数以外Touch事件还有很多函数比如实现多点触控等功能。要补充一点的是这里既然能监听触摸事件我们也能移除这个监听事件

https://i-blog.csdnimg.cn/blog_migrate/c61565c7928bef7bfaa8a0ab1eac0e1b.png ​​

这里为了方便移除我们把他抽出来做成一个touch_event函数

这样你就能移除这个监听触摸事件,包括移除所有监听: targetOff(),其他函数可以函数官方的API文档

2.键盘事件:

键盘事件的基本结构跟触摸类似,它主要有两个事件:cc.SystemEvent.EventType.KEY_DOWN和cc.SystemEvent.EventType.KEY_UP,通过cc.systemEvent这个全局实例来监听按键(注意区别两个system的大小写)

cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.key,this)
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,this.key,this)

key(event){
    switch(event.keyCode){
       case cc.macro.KEY.space:
       console.log("key!!!")
       break;
       }

这里可以看到注册了这两个键盘监听事件同样的这里的event就是函数的回调信息keyCode是一个按键码,macro.KEY是一个枚举类型里面封装了所有按键信息,通过switch用keyCode找到对应的之就能实现各种各样的按键触碰(其他按键API参考KEY枚举,这里便不赘述)

3.自定义事件:

在自定义事件中我们可以自己来进行消息的派送和监听,一样的监听我们使用on,而派送我们使用emit或者dispatchEvent来进行,emit和dispathEvent的区别是emit只能用于节点内部监听,不能进行冒泡传递,而dispatchEvent则可以向上进行传递:

运行:

OK,这几个基本上都是我们比较常用的触摸事件,感谢各位大佬阅览

 

 
Cocos Creator 是一个基于 JavaScript/TypeScript 的游戏开发引擎,专为 2D 和部分 3D 游戏设计。其工作原理围绕着一套完整的游戏开发流水线展开,涵盖从资源导入、场景编辑、脚本编写到跨平台发布的全过程。以下是其核心工作机制和技术要点的解析: ### 引擎架构与运行时机制 Cocos Creator 基于 Cocos2d-x 引擎的核心模块进行封装,并通过 TypeScript 实现更高层次的抽象和扩展性。其运行时系统主要包括以下几个关键组件: - **渲染系统**:支持 WebGL(Web)、OpenGL ES(移动端)等图形 API,能够根据目标平台自动选择合适的渲染后端。它通过分层绘制和批处理优化,实现高性能的图像输出。 - **节点系统**:采用层级结构组织游戏对象(Node),每个节点可以挂载多个组件(Component),如 Sprite、Label、AudioSource 等,构成实体的行为和表现。 - **事件系统**:提供统一的事件分发机制,包括系统级输入事件(如点击、触摸)和自定义逻辑事件,便于模块间通信[^1]。 ### 动画系统的实现 动画系统是 Cocos Creator 中较为复杂的一部分,其内部结构基于状态机和插值计算实现。开发者可以通过编辑器创建动画剪辑(AnimationClip),并将其绑定到节点或骨骼上。运行时,引擎会根据当前时间戳更新动画播放进度,并对关键帧数据进行插值计算,最终应用到目标属性上[^2]。 例如,以下是一个简单的动画播放代码片段: ```typescript const anim = this.getComponent(cc.Animation); anim.play("run"); ``` ### 场景切换机制 在 Cocos Creator 中,场景切换由 `cc.director` 控制,具体通过加载新的场景资源并卸载旧场景完成。加载过程包括资源预加载、节点树重建和组件初始化,确保新场景能正确启动并进入运行状态[^3]。 示例代码如下: ```typescript cc.director.runScene(cc.game.addPersistRootNode(cc.instantiate(this.nextScenePrefab))); ``` ### 资源管理与热更新 Cocos Creator 提供了基于 AssetBundle 的资源管理系统,支持按需加载和释放资源。此外,它还实现了完整的热更新机制,允许在不重新发布整个应用的前提下更新游戏内容。热更新依赖于 JSB(JavaScript Binding)技术和原生平台的动态加载能力,结合版本差异对比算法,仅下载必要的更新包,从而提高更新效率并减少用户等待时间[^4]。 ### 文字渲染与 UI 架构 Cocos Creator 使用 `TextRenderManager` 单例类来统一管理文本渲染流程。该类支持普通字符模式和图集模式,适用于不同类型的文本展示需求。对于艺术字体,系统会将字符纹理打包成图集,以提升绘制性能。UI 系统则采用锚点+布局组件的方式实现响应式界面设计,支持自动适配多种屏幕尺寸[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值