【问题标题】:Cocos2dx 3.4 - manipulating user inputCocos2dx 3.4 - 操纵用户输入
【发布时间】:2015-05-17 19:20:19
【问题描述】:

我正在使用 Cocos2dx 开发一款突围型游戏。

我需要制作一张高分表。游戏结束后,我想显示一个页面,玩家在文本字段中输入他的用户名。

我不知道如何将用户输入添加到变量中,因此我可以稍后对其进行操作(主要是与分数一起保存以将其显示在所选场景上)。

最简单的方法是什么?

【问题讨论】:

    标签: text input field cocos2d-x


    【解决方案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输入字符串并且你得到输入的内容,我建议使用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;
        }
        }
    }
    

    享受吧!

    【讨论】:

    • 抱歉,我还有一个问题。当我尝试在程序中使用std::string enteredData = textField->getString() 时,它会因访问冲突错误而崩溃。你知道可能是什么原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多