Cocos2dx游戏教程(十四):“见缝插针”,点击事件

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);

是不是很相似啊。
教程到这儿游戏的整体玩法和实现已经全部完成了,有兴趣的小伙伴们可以参考代码自己实现一下哦。教程包括全部的源代码,大家替换一下自己的资源哈。

后续还会有相关教程,大家可以持续关注啊。

在强调一下,资源来源于网络,仅供教学使用,如有侵权请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值