c++ - Sfml 文本输入箭头键

标签 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 用于处理普通字符。

最佳答案

遇到同样问题的 friend :
从事件类型变量中,首先检查它是否是键盘事件

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

然后检查它是否是一个箭头:

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

关于c++ - Sfml 文本输入箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39859419/

相关文章:

c++ - 重新初始化指针是不好的做法吗?

c++ - 自动将 A* 转换为 B*

c++ - SFML & OpenGL(glew) 为什么我的程序在绘制到新窗口时失败?

c++ - 你能推荐一些关于 Linux 上 Epoll 的指南吗?

python - 如何在 C++ 中创建类似于 Python 的 numpy 数组的数组?

c++ - SFML 中的碰撞不是那么好,如何改进它?

c++ - 移动 Sprite 和处理事件

c++ - SFML 在实现绘制函数时从派生类转换不明确

c++ - 如何显示凸多边形?

c++ - 重载运算符 << : too many parameters for this operator function