【发布时间】:2016-10-04 18:34:43
【问题描述】:
我正在用 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 用于处理普通字符。
【问题讨论】:
-
37和39的意义是什么?这些数字与左右方向键有什么关系?
-
恕我直言,
switch语句将更具可读性。 -
您是否使用调试器验证了密钥代码是否正确?我的理解是左箭头和右箭头需要多个字符来表示,如果按下就会超出ASCII范围。
-
您可以使用
'<'和'>'让您的代码比数字更具可读性。