Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Liczne niezidentyfikowane crash'e

Ostatnio zmodyfikowano 2012-03-03 20:05
Autor Wiadomość
jpowie01
Temat założony przez niniejszego użytkownika
[SFML] Liczne niezidentyfikowane crash'e
» 2012-02-25 23:16:58
Witajcie,
Ostatnio po ciężkich przeprawach z SFML 2.0, w końcu udało mi się ten cały bajzel ogarnąć. Spróbowałem jeszcze raz z v1.6 i... zastartowało ! Nie pytajcie jak... Tego nie wiem.
Teraz mam zupełnie inny problem. Mianowicie po przeczytaniu kursu, postanowiłem zabrać się za coś swojego. Na początek postanowiłem, że zrobię "prymitywną grawitację". Prymitywną, a to dlatego, że nie jest oparta na żadnych fizycznych wzorach ani nic z tej paki. Po prostu co chwilę ma się zwiększać prędkość opadania. Działać... działa. Nie wygląda to najlepiej, ale na sam początek jest OK. Więc w czym problem ? Co jakiś czas aplikacja po prostu przestaje działać, okno się samo zamyka. Bywa to w różnych momentach, czasami po zaraz po otwarciu aplikacji, czasami po 30s, raz nawet po 3min, co było rekordem działania. Myślałem, że aplikację zawiesza wypisywanie współrzędnych do konsoli, ale to nie to...
Może coś jest z kodem ? Zbyt chaotyczny ? Co jest nie tak ?

Oczywiście kod:
C/C++
#include <SFML/Graphics.hpp>
#include <iostream>

using namespace std;

main() {
    float grawitacja = 0;
   
    //Renderowanie okna
    sf::RenderWindow okno( sf::VideoMode( 800, 600, 32 ), "Grawitacja" );
   
    //Definicje obrazków
    sf::Image obrazek;
    obrazek.LoadFromFile( "prostokat.png" );
   
    //Definicje spritów
    sf::Sprite prostokat;
    prostokat.SetImage( obrazek );
    prostokat.SetPosition( 300, 400 );
    prostokat.SetScale( 1, 1 );
   
    //Pętla główna
    while( okno.IsOpened() ) {
        //Obsługa zdarzeń
        sf::Event zdarzenie;
        while( okno.GetEvent( zdarzenie ) ) {
            if( zdarzenie.Type == sf::Event::Closed ) {
                okno.Close();
            }
            if( zdarzenie.Key.Code == sf::Key::Escape ) {
                okno.Close();
            }
        }
       
        //Obsługa klawiszy
        const sf::Input & wejscie = okno.GetInput();
        if( wejscie.IsMouseButtonDown( sf::Mouse::Left ) ) {
            prostokat.SetPosition( wejscie.GetMouseX(), wejscie.GetMouseY() );
        }
       
        //"Grawitacja"
        if( prostokat.GetPosition().y < okno.GetHeight() - obrazek.GetHeight() ) {
            if( grawitacja < 10 ) grawitacja += 0.15;
           
            prostokat.Move( 0, grawitacja );
        } else {
            grawitacja = 0;
        }
       
        //Wypisywanie współrzędnych
        cout << "x: " << prostokat.GetPosition().x << " y: " << prostokat.GetPosition().y << "\n";
       
        //Czyszczenie okna i wyświetlanie
        okno.Clear( sf::Color( 115, 133, 255 ) );
        okno.Draw( prostokat );
        okno.Display();
        sf::Sleep( 0.01f );
    }
    return 0;
}
Z góry dzięki !
Pozdrawiam,
jpowie01
P-51431
SeaMonster131
» 2012-02-25 23:39:33
Uruchom w Debuggerze, może pokaże w jakim momencie aplikacja sie wywala ;p
P-51432
jpowie01
Temat założony przez niniejszego użytkownika
» 2012-02-26 00:23:55
Debugger nic nie pomaga. Może to wina systemu ? Pracuję na Win 7. Jutro spróbuję na XP. Wina kompilatora, lub biblioteki - raczej nie...
P-51434
SeaMonster131
» 2012-02-26 00:42:35
To możesz też zakomentować różne części kodu po kolei, i wtedy zobaczysz co powoduje ten crash.
P-51435
Dark
» 2012-02-26 00:55:58
pewnie gdzieś są wycieki pamięci lub podobne tego typu rzeczy. Polecam korzystanie z programowania zorientowanego obiektowo, przydaje się w programowaniu z SFML( i z każdą biblioteką którą tylko wymarzysz).
P-51436
jpowie01
Temat założony przez niniejszego użytkownika
» 2012-02-26 13:55:16
Spróbowałem metodę komentarzy. Ukryłem kod do pobierania stanu myszy i jej pozycji. Teraz aplikacja trwała jakby dłużej o.O Raz wyłączyła się po minucie, drugi raz po półtorej minucie. Sama z siebie. Pokombinowałem trochę z wartością grawitacji. Zmieniłem wartości na Integra, pozbyłem się przecinka. Też jakby pomogło, ale to też nie to. Tak czy siak się wyłącza. Debugger nie pomógł. Na XP to samo. Na drugiej siódemce też. Teraz jestem pewny - gdzieś w kodzie mam błąd, albo po prostu źle myślę i źle robię. Wieczorem jeszcze trochę nad tym posiedzę.

Dzięki za rady !
P-51459
Mrovqa
» 2012-02-26 16:28:18
Z jakiego IDE korzystasz? Jeśli Visual C++ 2010 (dla którego nie ma na internecie gotowej skompilowanej wersji - przynajmniej kiedy ostatni raz tam patrzyłem :P) i nie można użyć tej dla Visuala 2008. Trzeba samemu ją skompilować ze źródeł.
P-51465
jpowie01
Temat założony przez niniejszego użytkownika
» 2012-02-26 17:04:03
Używam Code::Blocks'a w v10.05 z najnowszą wersją MinGW. Biblioteka SFML tak jak już wspomniałem 1.6.
P-51468
« 1 » 2
  Strona 1 z 2 Następna strona