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: #include <SFML/Graphics.hpp> #include <iostream>
using namespace std;
main() { float grawitacja = 0; sf::RenderWindow okno( sf::VideoMode( 800, 600, 32 ), "Grawitacja" ); sf::Image obrazek; obrazek.LoadFromFile( "prostokat.png" ); sf::Sprite prostokat; prostokat.SetImage( obrazek ); prostokat.SetPosition( 300, 400 ); prostokat.SetScale( 1, 1 ); while( okno.IsOpened() ) { sf::Event zdarzenie; while( okno.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) { okno.Close(); } if( zdarzenie.Key.Code == sf::Key::Escape ) { okno.Close(); } } const sf::Input & wejscie = okno.GetInput(); if( wejscie.IsMouseButtonDown( sf::Mouse::Left ) ) { prostokat.SetPosition( wejscie.GetMouseX(), wejscie.GetMouseY() ); } if( prostokat.GetPosition().y < okno.GetHeight() - obrazek.GetHeight() ) { if( grawitacja < 10 ) grawitacja += 0.15; prostokat.Move( 0, grawitacja ); } else { grawitacja = 0; } cout << "x: " << prostokat.GetPosition().x << " y: " << prostokat.GetPosition().y << "\n"; 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 |
|
SeaMonster131 |
» 2012-02-25 23:39:33 Uruchom w Debuggerze, może pokaże w jakim momencie aplikacja sie wywala ;p |
|
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... |
|
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. |
|
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). |
|
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 ! |
|
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ł. |
|
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. |
|
« 1 » 2 |