Cocos2d-xのKeyboardEvent

Cocos2d-x開発環境(ubuntu)、「Ubuntu18.04を参照してCocos2d開発環境を構築してください

Linuxでプロジェクトを実行します。 LinuxでCocos2d-xプロジェクトを実行するを参照してください

ゲームのディレクトリのClassesディレクトリに次の2つのファイルを作成します
。KeyboardScene.h:

#include "cocos2d.h"

class KeyboardScene : public cocos2d::Layer{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    CREATE_FUNC(KeyboardScene);
};

KeyboardScene.cpp:

//
// Created by kyun on 20-3-19.
//

#include "KeyboardScene.h"

USING_NS_CC;

Scene* KeyboardScene::createScene() {
    auto scene = Scene::create();
    auto layer = KeyboardScene::create();
    scene->addChild(layer);
    return scene;
}

bool KeyboardScene::init() {
    if( !Layer::init()){
        return false;
    }

    // 创建一个精灵
    auto sprite = Sprite::create("HelloWorld.png");
    // 将精灵定位到场景中央
    sprite->setPosition(this->getContentSize().width/2,this->getContentSize().height/2);
    this->addChild(sprite,0);

    // 创建键盘监听器
    auto eventListener = EventListenerKeyboard::create();
    // 定义键盘按下处理函数
    eventListener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event){
        Vec2 loc = event->getCurrentTarget()->getPosition();
        switch (keyCode){
            // 按下向左箭头,或A键
            case EventKeyboard::KeyCode ::KEY_LEFT_ARROW:
            case EventKeyboard::KeyCode ::KEY_A:
                // 将与事件绑定的精灵向左移,按一下,移一下
                event->getCurrentTarget()->setPosition(--loc.x,loc.y);
                break;
            // 按下向右箭头,或D键
            case EventKeyboard::KeyCode ::KEY_RIGHT_ARROW:
            case EventKeyboard::KeyCode ::KEY_D:
                // 将与事件绑定的精灵向右移,按一下,移一下
                event->getCurrentTarget()->setPosition(++loc.x,loc.y);
                break;
            // 按下向上箭头,或W键
            case EventKeyboard::KeyCode ::KEY_UP_ARROW:
            case EventKeyboard::KeyCode ::KEY_W:
                // 将与事件绑定的精灵向上移,按一下,移一下
                event->getCurrentTarget()->setPosition(loc.x,++loc.y);
                break;
            // 按下向下箭头,或S键
            case EventKeyboard::KeyCode ::KEY_DOWN_ARROW:
            case EventKeyboard::KeyCode ::KEY_S:
                // 将与事件绑定的精灵向下移,按一下,移一下
                event->getCurrentTarget()->setPosition(loc.x,--loc.y);
                break;

        }
    };
    // 将事件监听器与精灵进行绑定
    this->_eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener,sprite);
}

ルートディレクトリのCMakeLists.txtファイルを変更します。

# add cross-platforms source files and header files 
list(APPEND GAME_SOURCE
     Classes/AppDelegate.cpp
	 Classes/KeyboardScene.cpp
     )
list(APPEND GAME_HEADER
     Classes/AppDelegate.h
	 Classes/KeyboardScene.h
     )

cmakeコマンドを実行します

~/Desktop/Games/MyGame/build/linux-build$ cmake ../..

ソースコードをコンパイルします。

~/Desktop/Games/MyGame/build/linux-build$ make -j 4

ゲームを実行します。

~/Desktop/Games/MyGame/build/linux-build$ cd bin/MyGame
~/Desktop/Games/MyGame/build/linux-build/bin/MyGame$ ./MyGame

テスト:

ここに画像の説明を挿入
WASDキーボードの4つのキーまたは4つの矢印キーを使用して、スプライトを移動します。

読んでくれてありがとう!

381の元の記事を公開 85を賞賛 80,000ビュー+

おすすめ

転載: blog.csdn.net/weixin_40763897/article/details/104991446