在android上获取cocos2d-x键盘信息

时间:2015-01-12 11:24:12

标签: cocos2d-x

我只是在HelloWorld::init()生成的干净基础(cocos new的最后)中插入以下代码:

auto kl = EventListenerKeyboard::create();

kl->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event) {
    CCLOG("%s> keyCode=%d",__FUNCTION__,keyCode);
};
auto ed = Director::getInstance()->getEventDispatcher();
ed->addEventListenerWithSceneGraphPriority(kl,this);

在Windows上,它运行良好。但在android上没有任何反应。 我认为值为keyCode的日志应保留在logcat中。 我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

方法一: 如果您只需要将键盘作为key-event来处理,它就像以下代码行一样简单:

HelloWorld::init()
{ 
    ...
    auto keyboardListener = EventListenerKeyboard::create();
    keyboardListener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event)
    {
        switch (keyCode)
        {
        case EventKeyboard::KeyCode::KEY_UP_ARROW:      /*Jump maybe*/  break;
        case EventKeyboard::KeyCode::KEY_DOWN_ARROW:    /*Crouch maybe*/    break;
        case EventKeyboard::KeyCode::KEY_RIGHT_ARROW:   /*Move Right maybe*/    break;
        case EventKeyboard::KeyCode::KEY_LEFT_ARROW:    /*Move Left maybe*/ break;
        }
    };
    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboardListener, this);
    ...
return true;
}

我认为很清楚,不需要任何额外的描述。

方法二:如果您需要input box用户/玩家可以输入keyboard字符串并且您输入的内容,我建议使用{{1}这在cocos2d v3中可用(并且在v2中有一些困难)并且具有完整功能。您可以创建并初始化其中一个:

TextField

您可以随时使用auto textField = cocos2d::ui::TextField::create("hint: enter here","Arial" , 30); textField->setTextHorizontalAlignment(cocos2d::TextHAlignment::CENTER); textField->setTextVerticalAlignment(cocos2d::TextVAlignment::CENTER); textField->setColor(Color3B(100,100,100)); textField->setMaxLength(10); textField->setMaxLengthEnabled(true); textField->setTouchAreaEnabled(true); textField->setTouchSize(Size(200,400)); textField->setPosition(...); textField->addEventListener(CC_CALLBACK_2(HelloWorld::textFieldEvent, this)); this->addChild(textField, 10);

获取输入的数据

当用户输入带有两个事件的文本时,您也可以执行以下操作:

std::string enteredData= textField->getString();

享受!