问题
SFML 窗口实现方法 hasFocus()
作为检查窗口是否有焦点或是否为背景窗口的便捷方式。
令我感到奇怪的是,此方法似乎没有为 sf::RenderWindow
实现,尤其是当以下代码编译但不链接时。 (也许这是一个错误或开发人员的疏忽?如果是这样,在下一组错误修复中实现它可能是一个想法。)
代码示例:
sf::RenderWindow window;
while(window.isOpen())
{
if(window.hasFocus())
{
// do something
}
window.clear();
// etc drawing code
}
此编译使用:g++ --std=c++11 main.cpp -o ratwatch -lsfml-graphics -lsfml-window -lsfml-system
可惜链接不上,报错如下:
/tmp/ccWhfqtT.o: In function `main':
main.cpp:(.text+0xc3b): undefined reference to `sf::Window::hasFocus() const'
collect2: error: ld returned 1 exit status
我的链接库有误吗?我是否错过了另一个 -lsfml...
?
解决方法
我设法用下面的代码做了我想做的事情,但这显然是一个困惑且不必要的复杂解决方法:
sf::RenderWindow window(sf::VideoMode(800, 600), "text");
bool WINDOW_HAS_FOCUS = false;
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::LostFocus)
{
WINDOW_HAS_FOCUS = false;
}
else if(event.type == sf::Event::GainedFocus)
{
WINDOW_HAS_FOCUS = true;
}
}
// ... later in program ...
if(WINDOW_HAS_FOCUS)
{
// do something
}
window.clear();
// etc drawing code
}
如果无法找到我最初问题的解决方案,希望这对无法做我想做的事情的人有所帮助。
最佳答案
您请求的功能已在最新版本的 SFML 中可用。
void requestFocus();
// to give the window the focus
bool hasFocus() const;
// to check whether the window is currently focused
此请求的问题已在 GitHub 上打开 here .
请求已通过此 request 合并到 master 中.
这是最后的 pull request .
您遇到的错误可能是由于您的 SFML header 和已编译的 SFML 二进制文件之间的版本不匹配造成的。我建议您确保您的 SFML 二进制文件已更新或重新编译 SFML。
关于c++ - 未定义对 sf::Window::hasFocus 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051064/