2013-02-16 3 views
1

Я начинаю создавать игру с SFML и C++. Тем не менее, у меня есть одна проблема. У меня есть базовый код скелетного класса, но по какой-то причине, когда я создаю окно (sf :: Window), я сразу же сбой! Этот код не содержит кода проверки событий, но он все же разбился; кроме того, по-видимому, для сбоя потребуется несколько секунд, если это из-за отсутствия проверки событий. Конечно, как только я увижу окно, я добавлю его.SFML (C++) Ошибка при создании окна? [SFML: 1.6, CB: 12.11]

#include <iostream> 
#include <windows.h> 
#include <SFML/Window.hpp> 
#include "GameBase.h" 
#include "Character.h" 
#include "GameStart.h" 

using namespace std; 
using namespace sf; 

int main() { 
    GameStart::GameStart(); 
    Clock timer; 
    cout << "Started." << endl; 

    Window GameWindow(VideoMode(640, 480),"Basic window"); 

    while (1) { 
     Sleep(0.5f); 
    } 
    return 0; 
} 

Я знаю, что это не таймер, GameStart или любые другие личные файлы.

+0

Только для информации, если вы не перегрузили ['Sleep'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx) функции, это недействительный аргумент. –

+1

Кроме того, лучший способ выяснить крушение - запустить вашу программу в отладчике. Это поможет вам разобраться в том, что происходит, позвольте вам изучить стек вызовов, чтобы увидеть, как вы оказались там, а также проверите переменные, чтобы выяснить, почему _why_ он разбился. –

+0

Как я и думал, это была линия создания окна. Может ли кто-нибудь дать мне какие-либо советы по его исправлению? – user2077420

ответ

1

Код :: Блоки 12.11 поставляется с MinGW GCC 4.7.1 Компилятор TDM, который несовместим с двоичными файлами, представленными на официальной странице загрузки, поэтому, если вы не перекомпилировали SFML 1.6 с новым компилятором, все не будет разрабатывать.

Кроме того, вы должны прочитать this section FAQ SFML.

0

Я попробовал это, и она работала без проблем:

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

int main() { 
    std::cout << "Started." << std::endl; 

    sf::Window gameWindow(sf::VideoMode(640, 480),"Basic window"); 

    while (gameWindow.IsOpened()) { 
     sf::Event event; 
     while (gameWindow.GetEvent(event)) { 

      if (event.Type == sf::Event::Closed) 
       gameWindow.Close(); 
     } 
    } 
    return EXIT_SUCCESS; 
} 

я заменил while(1) на то время (gameWindow.IsOpened()) и добавлена ​​поддержка кнопки закрытия. Это позволяет удалить заголовок окна, который здесь не уместен.

Вы должны попытаться скомпилировать и выполнить это в режиме отладки. Вероятно, это поможет вам понять проблему.

Также, когда ваш код не работает. Я предлагаю прокомментировать все, что не имеет значения (в этом примере: GameStart::GameStart();, Clock timer;, ...) и посмотреть, работает ли оно.