有没有更简单的方法让键盘输入 return 一个字符(SFML)?
Is there an easier way have keyboard input return a char (SFML)?
我想使用键盘输入作为函数的参数。我正在尝试获取 returns 字符的键盘输入:按下的键。
有没有比我现在做的更好的方法?
char getKey() {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
return 'A';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
return 'A';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::B))
{
return 'B';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::C))
{
return 'C';
}
//...
return '[=11=]';
}
我知道您可以使用 TextEntered,但我不想使用其他 ASCII 键(å、∫、ç、...)
有没有更简单的方法可以不用遍历每个字母?
您可以只在代码中处理事件
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
break;
}
else if(event.type == sf::Event::KeyPressed)
{
const sf::Keyboard::Key keycode = event.key.code;
if (keycode == sf::Keyboard::A)
std::cout << "A is pressed";
}
}
字母枚举字段的排列方式与 ASCII 相同。通过使用这个 属性 你可以通过添加 abd 减去得到一个字符:
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
int main() {
sf::RenderWindow window(sf::VideoMode(1200, 650), "");
std::string enteredChars;
enteredChars.reserve(1000);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
window.close();
} else if (event.type == sf::Event::KeyPressed) {
const sf::Keyboard::Key keycode = event.key.code;
if (keycode >= sf::Keyboard::A && keycode <= sf::Keyboard::Z) {
char chr = static_cast<char>(keycode - sf::Keyboard::A + 'a');
enteredChars.push_back(chr);
}
}
}
window.clear();
window.display();
}
std::cout << enteredChars << "\n";
}
我想使用键盘输入作为函数的参数。我正在尝试获取 returns 字符的键盘输入:按下的键。
有没有比我现在做的更好的方法?
char getKey() {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
return 'A';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
return 'A';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::B))
{
return 'B';
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::C))
{
return 'C';
}
//...
return '[=11=]';
}
我知道您可以使用 TextEntered,但我不想使用其他 ASCII 键(å、∫、ç、...)
有没有更简单的方法可以不用遍历每个字母?
您可以只在代码中处理事件
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
break;
}
else if(event.type == sf::Event::KeyPressed)
{
const sf::Keyboard::Key keycode = event.key.code;
if (keycode == sf::Keyboard::A)
std::cout << "A is pressed";
}
}
字母枚举字段的排列方式与 ASCII 相同。通过使用这个 属性 你可以通过添加 abd 减去得到一个字符:
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
int main() {
sf::RenderWindow window(sf::VideoMode(1200, 650), "");
std::string enteredChars;
enteredChars.reserve(1000);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
window.close();
} else if (event.type == sf::Event::KeyPressed) {
const sf::Keyboard::Key keycode = event.key.code;
if (keycode >= sf::Keyboard::A && keycode <= sf::Keyboard::Z) {
char chr = static_cast<char>(keycode - sf::Keyboard::A + 'a');
enteredChars.push_back(chr);
}
}
}
window.clear();
window.display();
}
std::cout << enteredChars << "\n";
}