Cocos的事件分为大概6种,分别为屏幕点击事件、键盘输入、鼠标点击、加速度事件、focus、自定义事件,对事件的操作施行的是监听机制,就是每种事件都有一个监听者类型。
本节主要介绍屏幕/按键点击事件,其他不做详细说明,使用方式类似。
一、屏幕点击事件
我们首先来看屏幕点击事件的函数原型,屏幕点击事件分为单点触摸和多点触摸
1、单点触摸
std::function<bool(Touch*, Event*)> onTouchBegan;
std::function<void(Touch*, Event*)> onTouchMoved;
std::function<void(Touch*, Event*)> onTouchEnded;
std::function<void(Touch*, Event*)> onTouchCancelled;
2、多点触摸
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesBegan;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesMoved;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesEnded;
std::function<void(const std::vector<Touch*>&, Event*)> onTouchesCancelled;
该教程的的游戏涉及到的为单点触摸,章节主要介绍单点触摸的实现,多点类似哦
在前面介绍到主场景实现是时候,在主场景头文件中我们可以看到如下方法
//触摸开始方法
bool onTouchBegan(Touch* touch, Event* event);
//触摸移动方法
void onTouchMoved(Touch* touch, Event* event);
//触摸结束方法
void onTouchEnded(Touch* touch, Event* event);
在类文件中有如下实现,详细请参考
Cocos2dx游戏教程(十一):“见缝插针”,主场景实现这一节的具体实现
//触摸开始方法
bool GameScene::onTouchBegan(Touch* touch, Event* event) {
return true;
}
//触摸移动方法
void GameScene::onTouchMoved(Touch* touch, Event* event) {
}
//触摸结束方法
void GameScene::onTouchEnded(Touch* touch, Event* event) {
}
在init方法中,我们可以看到这里面注册了监听EventListenerTouchOneByOne
//创建一个触摸监听
auto touchListener = EventListenerTouchOneByOne::create();
//向下传递触摸事件
touchListener->setSwallowTouches(false);
touchListener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this);
touchListener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this);
touchListener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this);
touchListener->onTouchCancelled = CC_CALLBACK_2(GameScene::onTouchCancelled, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
二、按键点击事件
按键事件和点击实现实现很相似啊,首先我们先声明方法
//按键点击事件
void onKeyReleased(EventKeyboard::KeyCode keycode, Event* event);
然后我们实现下监听函数
void GameScene::onKeyReleased(EventKeyboard::KeyCode keycode, Event* event) {
if (keycode == EventKeyboard::KeyCode::KEY_ESCAPE) {
Director::getInstance()->replaceScene(GameMenuScene::createScene());
} else if (keycode == EventKeyboard::KeyCode::KEY_MENU) {
}
}
最后在init中创建监听对象
//注册捕捉监听
auto listenerkeyPad = EventListenerKeyboard::create();
listenerkeyPad->onKeyReleased = CC_CALLBACK_2(GameScene::onKeyReleased, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerkeyPad, this);
是不是很相似啊。
教程到这儿游戏的整体玩法和实现已经全部完成了,有兴趣的小伙伴们可以参考代码自己实现一下哦。教程包括全部的源代码,大家替换一下自己的资源哈。
后续还会有相关教程,大家可以持续关注啊。
在强调一下,资源来源于网络,仅供教学使用,如有侵权请联系删除。