我在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用于处理普通字符。
答案 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