gpt4 book ai didi

c++ - 未定义对 sf::Window::hasFocus 的引用?

转载 作者:行者123 更新时间:2023-11-30 03:50:02 26 4
gpt4 key购买 nike

问题

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com