Cocos2d-x键盘按键
博客专区 > 南楼 的博客 > 博客详情
Cocos2d-x键盘按键
南楼 发表于8个月前
Cocos2d-x键盘按键
  • 发表于 8个月前
  • 阅读 22
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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

在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的值就可以得到了。

标签: Cocos2d-x
共有 人打赏支持
粉丝 0
博文 7
码字总数 5247
×
南楼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: