我只是在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中。
我错过了什么吗?
答案 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();
享受!