SFML 2实时文本输入?(无事件循环)
SFML 2 Real Time Text Input?(No Event Loop)
我正在写一个SFML程序,其中主窗口是在windows .cpp类中处理的。我也有一个ScreenManager类来处理不同的屏幕。在我的newMapScreen类中,我需要从用户获得文本输入,以命名他们正在创建的地图。我通过在这个newMapScreen类中传递窗口创建了一个事件循环,但是它注册事件的速度非常慢。用户必须按住按钮1秒以上,程序才能注册输入的密钥。我需要获得实时文本输入,就像做if(sf::Keyboard::isKeyPressed(sf::Keyboard:: Key))一样。也有任何方法,我可以使用键盘,而不检查键盘上的每个键?无论如何,我可以处理窗口类的文本输入,并在我的newMapScreen类访问它?这是一个很难理解的问题,对不起,伙计们。我目前得到这样的输入:
void newMapScreen::updateWithWindow(sf::RenderWindow &Window)
{
while(Window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::TextEntered:
if(onEnterMap)
{
if(event.text.unicode >= 32 && event.text.unicode <= 126)
{
mapNameS += (char)event.text.unicode;
}else if(event.text.unicode == 8 && mapNameS.getSize() > 0)
{
mapNameS.erase(mapNameS.getSize() -1, mapNameS.getSize());
}
}
if(onMapSizeX)
{
}
if(onMapSizeY)
{
}
break;
}
}
}
我把这个放在一起作为一个例子。这可能不是最好的方法,这只是一个例子。
#include <SFML/Graphics.hpp>
#include <string>
#include <iostream>
int main(){
sf::RenderWindow window(sf::VideoMode(500,500), "Text reader!");
std::string s;
while(window.isOpen()){
//Event processing.
sf::Event event;
while (window.pollEvent(event)){
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::TextEntered){
if(event.KeyPressed == sf::Keyboard::BackSpace && s.size()!=0){
s.pop_back();
std::cout << s << std::endl;
}
else if (event.text.unicode < 128) {
s.push_back((char)event.text.unicode);
std::cout << s << std::endl;
}
}
}
}
}
相关文章:
- 具有Qt事件循环的可移植通用共享库设置
- 如何将事件循环中的事件分派给订阅者?
- C++uWebSockets将事件循环集成到一个线程中
- 了解如何在不冻结事件循环的情况下在 QThread 中休眠/等待
- 如何在主事件循环之前创建一些对象?
- Libuv:保护事件循环免受并发访问
- 防止模式对话框中的事件循环阻塞
- QCoreApplication事件循环和Windows服务控制处理程序功能
- c++ 过期映射条目线程与事件循环
- Qt的事件循环线程是安全的还是原子的?处理"队列连接"时如何同步?
- 在事件循环启动后删除并创建新的 RTP 流
- QSTATEMACHINE事件循环与动画
- 等待事件循环为空 /等到QT5小部件关闭
- 如何将lambda函数排队到Qt的事件循环中?
- DLL中的QT事件循环
- 运行Qt 5.10事件循环howto的Windows服务service_WIN32_OWN_PROCESS
- 模态qprogressdialog :: setValue()导致嵌套事件循环崩溃
- 什么是QT中的事件循环
- Libuv中SD-BUS的事件循环处理
- Qt的事件循环是FIFO吗?