Cocos2dx 3.4 - 操纵用户输入
Cocos2dx 3.4 - manipulating user input
我正在使用 Cocos2dx 开发一款闯关类游戏。
我要打个高分table。游戏结束后,我想显示一个页面,玩家在文本字段中输入用户名。
我不知道如何将用户输入添加到变量中,所以我可以稍后操作它(主要是与分数一起保存以在所选场景中显示)。
最简单的方法是什么?
方法一:
如果你只需要像 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
,user/player可以用keyboard
输入字符串并且你得到输入的内容,我建议使用 TextField
,它在 cocos2d v3 中可用(在 v2 中有一些困难)并且具有完整的功能。您可以创建并初始化其中之一:
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();
获取输入的数据
当用户输入带有两个事件的文本时,您也可以做一些事情:
void HelloWorld::textFieldEvent(Ref *pSender, cocos2d::ui::TextField::EventType type)
{
switch (type)
{
case cocos2d::ui::TextField::EventType::ATTACH_WITH_IME:
{
textField->setColor(Color3B::BLACK);
// or whatever elese
break;
}
case cocos2d::ui::TextField::EventType::DETACH_WITH_IME:
{
textField->setColor(Color3B(100,100,100));
// or whatever elese
break;
}
}
}
尽情享受吧!
我正在使用 Cocos2dx 开发一款闯关类游戏。
我要打个高分table。游戏结束后,我想显示一个页面,玩家在文本字段中输入用户名。
我不知道如何将用户输入添加到变量中,所以我可以稍后操作它(主要是与分数一起保存以在所选场景中显示)。
最简单的方法是什么?
方法一:
如果你只需要像 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
,user/player可以用keyboard
输入字符串并且你得到输入的内容,我建议使用 TextField
,它在 cocos2d v3 中可用(在 v2 中有一些困难)并且具有完整的功能。您可以创建并初始化其中之一:
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();
当用户输入带有两个事件的文本时,您也可以做一些事情:
void HelloWorld::textFieldEvent(Ref *pSender, cocos2d::ui::TextField::EventType type)
{
switch (type)
{
case cocos2d::ui::TextField::EventType::ATTACH_WITH_IME:
{
textField->setColor(Color3B::BLACK);
// or whatever elese
break;
}
case cocos2d::ui::TextField::EventType::DETACH_WITH_IME:
{
textField->setColor(Color3B(100,100,100));
// or whatever elese
break;
}
}
}
尽情享受吧!