C ++ sfml在窗口打开后收到close事件

时间:2015-02-11 17:59:25

标签: c++ xcode sfml

我正在尝试遵循此link的SFML教程,但是,出于某种原因,我的应用程序似乎在我的程序进入事件循环后立即调用close事件。

这是我的代码。

#include <SFML/Graphics.hpp>
#include <iostream>

// Here is a small helper for you ! Have a look.
#include "ResourcePath.hpp"

int main()
{
sf::RenderWindow Window(sf::VideoMode(500,400),"SFML tutorial");
/* Or we can do this
 * sf::RenderWindow Window
 * Window.create (sf::VideoMode(800,600),"SFML tutorial");
 */

//Game loop
while(Window.isOpen())
{
    sf::Event Event;
    while(Window.pollEvent(Event));
    {
        if(Event.type == sf::Event::Closed)
        {
            Window.close();
            std::cout << "Close" << std::endl;

        }
    }
}

return 0;

}

出于某种原因,只要我的程序进入事件循环,它就会收到一个sf :: Event :: Closed事件。我做了一些研究,这不是因为窗口太大而不适合我的屏幕。
要解决我的问题,我必须将int变量canClose添加到0,然后将事件循环修改为此。

if(Event.type == sf::Event::Closed)
{
    if(canClose == 1)
    {
        Window.close();
    } else {
        canClose = 1;
    }
}

执行此操作后,窗口现在打开并按预期运行。

P.S这是使用xcode和SFML模板制作的。

编辑:
刚刚创建了一个新的xcode SFML项目,并删除了一些代码,以创建一个空窗口,它似乎是whork。代码看起来完全一样。这种接缝很奇怪,因为它是完全相同的代码。

2 个答案:

答案 0 :(得分:1)

从我所看到的,不要使用if语句来检查事件,使用switch语句。在尝试轮询事件时也使用while(window.isOpen())

您是否阅读了http://www.sfml-dev.org上的教程?因为我可以保证它是学习sfml的最佳来源。在使用其他来源之前使用它。

答案 1 :(得分:-1)

您的问题是您声明了变量事件事件类型,您必须将变量的名称更改为小写。

以这种方式

#include <SFML/Graphics.hpp>
#include <iostream>

// Here is a small helper for you ! Have a look.
#include "ResourcePath.hpp"

int main()
{
sf::RenderWindow Window(sf::VideoMode(500,400),"SFML tutorial");
/* Or we can do this
* sf::RenderWindow Window
* Window.create (sf::VideoMode(800,600),"SFML tutorial");
*/

//Game loop
while(Window.isOpen())
{
sf::Event event;
while(Window.pollEvent(event));
{
    if(event.type == sf::Event::Closed)
    {
        Window.close();
        std::cout << "Close" << std::endl;

    }
}
} 

return 0;

这样你就不会有任何问题

相关问题