[SFML] Liczne niezidentyfikowane crash'e
Ostatnio zmodyfikowano 2012-03-03 20:05
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 |
|
pekfos |
» 2012-03-01 19:11:27 Przy jakim callstacku się sypie? (debuggera użyj..) |
|
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 :/ |
|
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: 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: if( zdarzenie.Type == sf::Event::KeyPressed ) { if( zdarzenie.Key.Code == sf::Key::Escape ) { } if( zdarzenie.Key.Code == sf::Key::Left ) { } if( zdarzenie.Key.Code == sf::Key::Right ) { } } if( zdarzenie.Type == sf::Event::MouseButtonPressed ) { } else { } Mam nadzieję, że pomogłem. Przynajmniej u mnie, po tej poprawce, program działa poprawnie :) |
|
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 |
|
1 « 2 » |