Sfml文本输入箭头键

时间:2016-10-04 18:34:44

标签: c++ sfml

我在sfml中制作控制台风格的游戏。它是图形界面,但游戏本身包含控制台。我正在使用Text Entered事件在控制台中写东西,但我也想用箭头键移动光标(控制台光标而不是鼠标)。为了更具体地在文本输入事件中我使用event.text.unicode作为键值。但箭头键unicode值不能在我的电脑上工作。我用左箭头37,右箭头39,但它不起作用。这是我的控制台的关键过程功能。

void Console::update(int unicode) {
    if(unicode == 8) { // Backspace
        deleteLast();
    } else if(unicode == 13) { // Enter
        newLine();
    } else if(unicode == 37) { // Left arrow key
        currentX--;
        std::cout << "Left arrow" << std::endl;
    } else if(unicode == 39) { // Right arrow key
        currentX++;
        std::cout << "Right arrow" << std::endl;
    } else { // Normal characters
        buffer[(currentY == 0) ? currentX : (currentY * maxColumn) + currentX] = (char)unicode;
        currentX++;
        if(currentX == maxColumn - 1) {
            newLine();
        }
        std::cout << "[KEY TYPED] X: " << currentX << " Y: " << currentY << std::endl;
    }
}

提前致谢:)

编辑:我想我已经解决了。我使用KeyPressed事件来处理特殊键。和TextEntered用于处理普通字符。

1 个答案:

答案 0 :(得分:1)

对于那些有同样问题的人:
从Event类型变量,首先检查它是否是键盘事件

if(event.type == sf::Event::KeyPressed)

然后检查它是否为箭头:

if(event.key.code == sf::Keyboard::Up)
    //do stuff
if(event.key.code == sf::Keyboard::Down)
    //do stuff