文档章节

Cocos2d-x键盘按键

南楼
 南楼
发布于 2017/05/29 12:33
字数 869
阅读 31
收藏 0
点赞 0
评论 0

在cocos2d-x的交互功能中,必不可免的会有键盘响应的事件(除了PC端游戏会用到键盘,现在有些手机或者平板也会插上键盘来进行辅助) 对于键盘事件的监听,许多教程或者书本上都有讲述。但是对于键盘具体按键的判断,许多教程书籍上并没有提到。笔者查阅了一下资料以及键盘事件的头文件,得到了一个相对简便的方法。

首先我们先创建一个事件监听器监听键盘事件

"HelloWorldScene.h"
//在HelloWorldScene.h头文件中重写键盘按下弹回的两个方法
virtual void onKeyPressed(EventKeyboard::KeyCode keycode, Event *event);
virtual void onKeyReleased(EventKeyboard::KeyCode keycode, Event *event);
"HelloWorldScene.cpp"
auto *dispatcher = Director::getInstance()->getEventDispatcher();
auto* keyListener = EventListenerKeyboard::create();
//创建一个事件监听器监听键盘事件
keyListener->onKeyPressed = CC_CALLBACK_2(HelloWorld::onKeyPressed, this);
//键盘被按下时响应
keyListener->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
//键盘按键被弹回时响应
dispatcher->addEventListenerWithSceneGraphPriority(keyListener,this);

许多教程书籍上对于键盘响应事件的讲解大多到这里就截止了,对于如何判断键盘按下的是哪个键大多读者都是十分迷茫。

其实判断键盘按键的方法就在键盘响应事件方法的第一个参数上:EventKeyboard::KeyCode keycode。对,就是EventKeyboard::KeyCode,KeyCode定义了键盘上所有的按键。

下面我们来看一下"CCEventKeyboard.h"头文件中KeyCode的定义

enum class KeyCode
    {
        KEY_NONE,
        KEY_PAUSE,
        KEY_SCROLL_LOCK,
        KEY_PRINT,
        KEY_SYSREQ,
        KEY_BREAK,
        KEY_ESCAPE,
        KEY_BACK = KEY_ESCAPE,
        KEY_BACKSPACE,
        KEY_TAB,
        KEY_BACK_TAB,
        KEY_RETURN,
        KEY_CAPS_LOCK,
        KEY_SHIFT,
        KEY_LEFT_SHIFT = KEY_SHIFT,
        KEY_RIGHT_SHIFT,
        KEY_CTRL,
        KEY_LEFT_CTRL = KEY_CTRL,
        KEY_RIGHT_CTRL,
        KEY_ALT,
        KEY_LEFT_ALT = KEY_ALT,
        KEY_RIGHT_ALT,
        KEY_MENU,
        KEY_HYPER,
        KEY_INSERT,
        KEY_HOME,
        KEY_PG_UP,
        KEY_DELETE,
        KEY_END,
        KEY_PG_DOWN,
        KEY_LEFT_ARROW,
        KEY_RIGHT_ARROW,
        KEY_UP_ARROW,
        KEY_DOWN_ARROW,
        KEY_NUM_LOCK,
        KEY_KP_PLUS,
        KEY_KP_MINUS,
        KEY_KP_MULTIPLY,
        KEY_KP_DIVIDE,
        KEY_KP_ENTER,
        KEY_KP_HOME,
        KEY_KP_UP,
        KEY_KP_PG_UP,
        KEY_KP_LEFT,
        KEY_KP_FIVE,
        KEY_KP_RIGHT,
        KEY_KP_END,
        KEY_KP_DOWN,
        KEY_KP_PG_DOWN,
        KEY_KP_INSERT,
        KEY_KP_DELETE,
        KEY_F1,
        KEY_F2,
        KEY_F3,
        KEY_F4,
        KEY_F5,
        KEY_F6,
        KEY_F7,
        KEY_F8,
        KEY_F9,
        KEY_F10,
        KEY_F11,
        KEY_F12,
        KEY_SPACE,
        KEY_EXCLAM,
        KEY_QUOTE,
        KEY_NUMBER,
        KEY_DOLLAR,
        KEY_PERCENT,
        KEY_CIRCUMFLEX,
        KEY_AMPERSAND,
        KEY_APOSTROPHE,
        KEY_LEFT_PARENTHESIS,
        KEY_RIGHT_PARENTHESIS,
        KEY_ASTERISK,
        KEY_PLUS,
        KEY_COMMA,
        KEY_MINUS,
        KEY_PERIOD,
        KEY_SLASH,
        KEY_0,
        KEY_1,
        KEY_2,
        KEY_3,
        KEY_4,
        KEY_5,
        KEY_6,
        KEY_7,
        KEY_8,
        KEY_9,
        KEY_COLON,
        KEY_SEMICOLON,
        KEY_LESS_THAN,
        KEY_EQUAL,
        KEY_GREATER_THAN,
        KEY_QUESTION,
        KEY_AT,
        KEY_CAPITAL_A,
        KEY_CAPITAL_B,
        KEY_CAPITAL_C,
        KEY_CAPITAL_D,
        KEY_CAPITAL_E,
        KEY_CAPITAL_F,
        KEY_CAPITAL_G,
        KEY_CAPITAL_H,
        KEY_CAPITAL_I,
        KEY_CAPITAL_J,
        KEY_CAPITAL_K,
        KEY_CAPITAL_L,
        KEY_CAPITAL_M,
        KEY_CAPITAL_N,
        KEY_CAPITAL_O,
        KEY_CAPITAL_P,
        KEY_CAPITAL_Q,
        KEY_CAPITAL_R,
        KEY_CAPITAL_S,
        KEY_CAPITAL_T,
        KEY_CAPITAL_U,
        KEY_CAPITAL_V,
        KEY_CAPITAL_W,
        KEY_CAPITAL_X,
        KEY_CAPITAL_Y,
        KEY_CAPITAL_Z,
        KEY_LEFT_BRACKET,
        KEY_BACK_SLASH,
        KEY_RIGHT_BRACKET,
        KEY_UNDERSCORE,
        KEY_GRAVE,
        KEY_A,
        KEY_B,
        KEY_C,
        KEY_D,
        KEY_E,
        KEY_F,
        KEY_G,
        KEY_H,
        KEY_I,
        KEY_J,
        KEY_K,
        KEY_L,
        KEY_M,
        KEY_N,
        KEY_O,
        KEY_P,
        KEY_Q,
        KEY_R,
        KEY_S,
        KEY_T,
        KEY_U,
        KEY_V,
        KEY_W,
        KEY_X,
        KEY_Y,
        KEY_Z,
        KEY_LEFT_BRACE,
        KEY_BAR,
        KEY_RIGHT_BRACE,
        KEY_TILDE,
        KEY_EURO,
        KEY_POUND,
        KEY_YEN,
        KEY_MIDDLE_DOT,
        KEY_SEARCH,
        KEY_DPAD_LEFT,
        KEY_DPAD_RIGHT,
        KEY_DPAD_UP,
        KEY_DPAD_DOWN,
        KEY_DPAD_CENTER,
        KEY_ENTER,
        KEY_PLAY
    };

看到这想必绝大多数读者就已经明白了,就是判断键盘按键所产生的EventKeyboard::KeyCode 的值。 下面写个例子

//重写onKeyPressed方法来实现具体按键的判断
void HelloWorld::onKeyPressed(EventKeyboard::KeyCode keycode, Event *event) {
	if (keycode == EventKeyboard::KeyCode::KEY_UP_ARROW) {
		CCLOG("按下了:上方向键");
	}
	else if (keycode == EventKeyboard::KeyCode::KEY_LEFT_ARROW) {
		CCLOG("按下了:左方向键");
	}
	else if (keycode == EventKeyboard::KeyCode::KEY_RIGHT_ARROW) {
		CCLOG("按下了:右方向键");
	}
	else if (keycode == EventKeyboard::KeyCode::KEY_DOWN_ARROW) {
		CCLOG("按下了:下方向键");
	}
}

这样键盘按键通过与KeyCode的定义值进行比较,可以判断出键盘是否按出来我们所需要的键。当然要得出按下了哪一个键,通过输出KeyCode的值就可以得到了。

© 著作权归作者所有

共有 人打赏支持
南楼
粉丝 0
博文 7
码字总数 5247
作品 0
沈阳
程序员
Cocos2d-x 2.0 按键加速处理深入分析

[Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ2群:44208467 Cocos2d-x 2.0 按键加速处理深入分析 另:本章所用C...

长平狐 ⋅ 2013/03/19 ⋅ 0

Cocos2d-X2.2版本框架源码分析第一讲

Cocos2d-x源码剖析 cocos2d-x应用窗口相关源码剖析 1 CCApplicationProtocol、CCApplication、AppDelegate类实现源码分析 什么是框架,框架最低要求 理论: 1)框架定义了一些协议(功能的抽...

扶殊88 ⋅ 2014/04/01 ⋅ 0

cocos2d-x学习资料(转)

我之前一直学习c++的,第一次接触cocos2d是oc版的,虽然很好用,但是,我还是对c++情有独钟,再加之cocos2d-x由自己人主导,更应该拥抱她,热爱她,把她发扬光大。之后,我将会全面投入c...

未来十年 ⋅ 2012/07/31 ⋅ 0

Cocos2d-JS键盘事件

Cocos2d-JS中的键盘事件与触摸事件不同,它没有空间方面信息。键盘事件不仅可以响应键盘,还可以响应设备的菜单。 键盘事件是EventKeyboard,对应的键盘事件监听器(cc.EventListener.KEYBOA...

智捷课堂 ⋅ 2015/04/01 ⋅ 0

Cocos-x 3.2:从C++过渡到Lua

原文总结的非常好,都是我们学cocos2d-x以来摸索过的东西,如果早有这篇文章就能少走不少弯路了,特此截屏保存。原文链接:http://shahdza.blog.51cto.com/2410787/1569003 (原文中说的get...

乐逍遥jun ⋅ 2016/02/22 ⋅ 0

EV_REP,input_repeat_key,键盘重复,GPIO键盘

【转帖请注明出处:blog.csdn.net/lanmanck】 要实现的效果:类似桌面打开记事本,按下键盘后有输入,按住按键不放的话就连续输入。 环境:嵌入式Linux系统,键盘有GPIO扫描实现,模拟成标准...

长平狐 ⋅ 2012/06/12 ⋅ 1

Cocos2d-JS事件处理机制

在很多图形用户技术中,事件处理机制一般都有三个重要的角色:事件、事件源和事件处理者。事件源是事件发生的场所,通常就是各个视图或控件,事件处理者是接收事件并对其进行处理的一段程序。...

智捷课堂 ⋅ 2015/03/31 ⋅ 0

pcDuino 香蕉钢琴

前面我们已经介绍使用TouchkeyUSB Shield在Arduino上实现香蕉钢琴,Arduino是通过模拟USB HID(Human Interface Device)的方法来实现的,而在强大的pcDuino上面直接通过模拟键盘的输入就可以...

酸酸苹果汁 ⋅ 2013/12/24 ⋅ 3

按键手势编辑方式 upstream

版权协议 [按键手势 upstream][3] 由 喻恒春 创作,采用[知识共享 署名 3.0 未本地化版本 许可协议][2] 进行许可。![知识共享许可协议][1] 名词 “按住”是按下键不抬起 “按下”是按下键并抬...

喻恒春 ⋅ 2013/06/10 ⋅ 0

python selenium-webdriver 元素操作之键盘操作

selenium 提供了比较完整的键盘操作,在使用的模拟键盘操作之前需要我们导入即可,然后就可以来模拟键盘操作。 导入模块以后,我们可以看看具体的定义按键内容,我已经把经常使用的按键注释标...

_周小董 ⋅ 2017/12/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 34分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部