欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  互联网

cocos2d-x 4.0 学习之路(二十)忍者来袭-让主角动起来-监听键盘事件

程序员文章站 2022-06-18 10:06:07
cocos2dx提供了监听键盘的两种事件,键盘按下和键盘抬起。auto listener = EventListenerKeyboard::create();listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this);...
在忍者来袭的小游戏中,有一个非常大的缺憾,就是主角一直是静止不动,只能呆呆的发飞镖。这对于玩家的交互体验是非常差的。
那么,这节我们就让主角的忍者动起来,让他可以灵活移动,躲避敌人的进攻。
涉及到的知识点是键盘的监听事件。
cocos2dx提供了监听键盘的两种事件,键盘按下和键盘抬起。
具体的代码如下,也比较简单:
// 先建立一个键盘listener
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);	// 定义按下事件
listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this); // 定义抬起事件
// 注册键盘Listener
_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);
}
那么,在忍者来袭的代码中,具体实现如下:
// NinjaAttack_Level1.h
void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* events);
	// NinjaAttack_Level1.cpp 
	// 在init()中加入键盘监听事件
    // 键盘事件监听
    auto keyListener = EventListenerKeyboard::create();
    keyListener->onKeyPressed = CC_CALLBACK_2(NA_Level1::onKeyPressed, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);
// NinjaAttack_Level1.cpp 
void NA_Level1::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event) {
    log("Key with keycode %d pressed", keyCode);
    switch (keyCode) {
    case EventKeyboard::KeyCode::KEY_D:
    {
        auto moveBy = MoveBy::create(0.5f, Vec2(20, 0));
        _player->runAction(Sequence::create(moveBy, nullptr));
        break;
    }
    case EventKeyboard::KeyCode::KEY_A:
    {
        auto moveBy = MoveBy::create(0.5f, Vec2(-20, 0));
        _player->runAction(Sequence::create(moveBy, nullptr));
        break;
    }
    case EventKeyboard::KeyCode::KEY_W:
    {
        auto moveBy = MoveBy::create(0.5f, Vec2(0, 20));
        _player->runAction(Sequence::create(moveBy, nullptr));
        break;
    }
    case EventKeyboard::KeyCode::KEY_S:
    {
        auto moveBy = MoveBy::create(0.5f, Vec2(0, -20));
        _player->runAction(Sequence::create(moveBy, nullptr));
        break;
    }
    default:
        break;
    }
}

这里面的KeyCode就是对应键盘的按键,我定义的W、S、A、D代表上下左右。
其他比如:KEY_0 代表数字0,KEY_SPACE代表空格等等,这个可以自己查一下。
完活了, 看一下效果:
cocos2d-x 4.0 学习之路(二十)忍者来袭-让主角动起来-监听键盘事件
还算不错,移动起来还算灵活,这个灵活度就是看你设定的每按一次移动多少距离和所用时间了。唯一的缺点就是没有持续按键的监听功能,你必须得抬起按键然后再点。希望以后API能够改善。

本文地址:https://blog.csdn.net/sunnyboychina/article/details/109255228