400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > unity > 【Unity基础知识】Cocos2d-x事件机制

【Unity基础知识】Cocos2d-x事件机制

  • 来源:Unity干货资料
  • 2020-11-11 14:59:52
  • 阅读()
  • 分享
  • 手机端入口

简介

游戏中会有各种各样的处理用户输入的需求,例如当玩家按下了某个按键则飞机会发射一颗子弹,三消游戏中拖动屏幕中的方块移动会触发与其边上的方块交换等。

那么在Cocos2d-x引擎中这部分功能是如何实现的呢?答案是通过事件分发机制响应用户事件,引擎不仅内置了常见的事件如触摸事件,键盘事件等,而且还提供了创建自定义事件的方法以满足我们在游戏的开发过程中特殊的事件响应需求。今天就来为大家讲解在Cocos2d-x引擎中如何使用事件分发机制来处理用户的输入。

事件相关基本概念

首先我们要搞清楚与事件相关的三个基本元素,它们分别为:

(1)事件监听器:负责接收事件,并执行预定义的事件处理函数

(2)事件分发器:负责发起通知

(3)事件对象:记录事件的相关信息

监听器的类型

监听器总共有5种类型,分别为:

(1)EventListenerTouch - 响应触摸事件

(2)EventListenerKeyboard - 响应键盘事件

(3)EventListenerAcceleration - 响应加速度事件

(4)EventListenMouse - 响应鼠标事件

(5)EventListenerCustom - 响应自定义事件

【Unity基础知识】Cocos2d-x事件机制

接下来重点给大家介绍触摸事件和键盘事件。

触摸事件

触摸事件是手机游戏中最重要的事件,它易于创建,还能提供多种多样的功能。当你触摸移动设备的屏幕时,设备获取到触控位置,同时取得触控的内容,最后在程序中响应这个过程,这就是触摸事件流程处理。可以按照以下步骤进行:

// 创建一个"one by one" 触摸事件监听器(同时只能响应单点触摸)

auto listener1 = EventListenerTouchOneByOne::create();

// 给监听器追加响应回调函数-开始触摸

listener1->onTouchBegan = [](Touch* touch, Event* event){

//在这里处理核心业务逻辑

return true;

};

// 给监听器追加响应回调函数-触摸中移动

listener1->onTouchMoved = [](Touch* touch, Event* event){

//核心业务代码

};

// 给监听器追加响应回调函数-结束触摸

listener1->onTouchEnded = [=](Touch* touch, Event* event){

// 核心业务代码

};

//添加监听器

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);

可以看到,在使用触摸事件监听器时,可以监听三种不同的事件,每一个事件都有自己触发的时机。

三种事件及其触发时机:

(1)onTouchBegan 开始触摸屏幕时

(2)onTouchMoved 触摸屏幕,同时在屏幕上移动时

(3)onTouchEnded 结束触摸屏幕时

键盘事件

对于桌面游戏,一般需要通过键盘做一些游戏内的控制,这时你就需要监听键盘事件。Cocos2d-x 支持键盘事件,就像上节介绍的触摸事件一样。

创建键盘事件监听器:

auto listener = EventListenerKeyboard::create();

//绑定按键按下事件与按键抬起事件

listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);

listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this);

//添加监听器到事件派发器

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

// 按键按下回调函数

void KeyboardTest::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)

{

log("Key with keycode %d pressed", keyCode);

}

// 按键抬起回调函数

void KeyboardTest::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)

{

log("Key with keycode %d released", keyCode);

}

可以看到,在使用键盘事件监听器时,可以监听两种不同的事件,每一个事件都有自己的触发时机。

两种事件及触发时机:

onKeyPressed 按键被按下时

onKeyReleased 按下状态的按键被放开时

课程好礼申请领取
您的姓名
您的电话
意向课程
 

中公优就业

官方QQ

扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,领80G学习资料
QQ交流群
领取免费网课
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
领取80G学习资料

编程入门优选课
1元购买
12.1-12.12限时购
1元购买
课程资料、活动优惠 领取通道