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
» 2012-03-01 19:09:10
Słuchajcie. Trochę mnie to zaczyna irytować. A mówiąc "trochę" mam na myśli "niesamowicie". Co to może być ? Źle zoptymalizowany kod, MinGW, C::B, system ? Kompletnie nie wiem. Mam podejrzenia co do kodu, mianowicie przyjmowanie zdarzeń poprzez sf::Input oraz przesunięcie czasowe. Przy zmianach, bądź pozbyciu się tych wartości crash'e znikają. W takim razie jak to powinno wyglądać ? Co robię źle ?

Pozdrawiam,
jpowie01
P-51694
pekfos
» 2012-03-01 19:11:27
Przy jakim callstacku się sypie? (debuggera użyj..)
P-51695
jpowie01
Temat założony przez niniejszego użytkownika
» 2012-03-02 23:21:17
No właśnie debugger jest czysty. Program się po prostu wyłącza. Debugger razem z nim. Call stack czysty :/
Log debuggera też czysty:
Program exited normally.
Debugger finished with status 0

Przy innych prostych programach to samo. Mam co raz to większą ochotę walnąć to wszystko w kąt i zabrać się za jakąś stabilną i sprawdzoną bibliotekę. Choć po opiniach w Internecie to SFML jest jednym z tych "lepszych" do nauki i pisania :/
P-51782
michalk93
» 2012-03-03 00:21:50
Pierwszą rzeczą jaką należy zauważyć jest to, iż Twój program, gdy niespodziewanie się zakończy, w konsoli zwraca wartość 0 - co oznacza, że program zakończył się poprawnie.
Kolejno Twój program może zakończyć się poprawnie w dwóch sytuacjach:
   1) gdy wywołasz zdarzenie <<Zamknięcia okna>> np. poprzez przycisk "Zamknij" na oknie lub skrót klawiaturowy
   2) gdy zostanie wciśnięty klawisz ESC.

Niestety zapomniałeś o sprawdzeniu w (pkt. 2) przy tym klawiszu, czy to zdarzenie jest związane z klawiaturą, tzn. czy przycisk klawiatury został wciśnięty.
Tak więc warunek zajścia zdarzenia <<wciśnieto klawisz ESC>> powinien w Twoim przypadku wyglądać tak:
C/C++
if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
DOBRA RADA:
A co gdybyś w programie obsługiwał np. 50 klawiszy z klawiatury. Czy przy każdym z nich musisz pisać tak jak powyżej. Oczywiście, że nie! Najpierw sprawdzasz czy wywołano zdarzenie <<Klawisz został wciśniety>> a dopiero potem sprawdzasz jaki to klawisz:
C/C++
if( zdarzenie.Type == sf::Event::KeyPressed ) {
    if( zdarzenie.Key.Code == sf::Key::Escape ) {
        //Kod obsługi
    }
    if( zdarzenie.Key.Code == sf::Key::Left ) {
        //Kod obsługi
    }
    if( zdarzenie.Key.Code == sf::Key::Right ) {
        //Kod obsługi
        //itd.
    }
}
if( zdarzenie.Type == sf::Event::MouseButtonPressed ) {
    //Kod obsługi
} else {
    //itd.
}
Mam nadzieję, że pomogłem. Przynajmniej u mnie, po tej poprawce, program działa poprawnie :)
P-51785
jpowie01
Temat założony przez niniejszego użytkownika
» 2012-03-03 20:05:14
SZOK ! :D Działa. Nigdy bym na to nie wpadł :o Masz ode mnie wirtualne piwo!
Myślałem, że skoro istnieje kod przycisku, to musiał on być jakoś wywołany... Dlatego go pominąłem. W kursie rzeczywiście było tak jak podałeś.. Jednak mój błędny tok rozumowania :D

Dzięki wielkie !
Pozdrawiam,
jpowie01
P-51877
1 « 2 »
Poprzednia strona Strona 2 z 2