Zmienna bool o wartości... 19
Witam. Próbuję zrobić prostą gierkę używając biblioteki Allegro 5(ale sam problem allegro nie dotyczy). Używam zmiennych logicznych które mówią czy kulka porusza się w danym kierunku. No ale z nimi mam problem. I to dość dziwny...
Wciskanie klawiszy mimo że dobrze ustawione nie działało. A kulka uciekała z ekranu własną ścieżką. To postanowiłem sprawdzić co tam kryje się za tymi boolami odpowiedzialnymi za kierunek. Nadmienię że powinny być one ustawione na false. I użyłem takiej funkcji:
al_draw_textf( font, al_map_rgb( 255, 255, 255 ), 100, 300, 0, "left:%d right:%d up:%d down:%d", static_cast < int >( hero.left ), static_cast < int >( hero.right ), static_cast < int >( hero.up ), static_cast < int >( hero.down ) );
Działa ona jak zwykły printf. Tyle że wypisuje to na bitmapie. Po uruchomieniu, ukazał się oto taki napis:
left:0 right:0 up:19 down:0
Załamało mnie trochę. Niemożliwa rzecz. Nie wiedziałem co zrobić. Napisałem coś takiego:
if( up == true )
[funkcja wyżej]
Teraz informacje o zmiennych nie pojawiły się. Więc napisałem tak:
if( up == 19 )
[funkcja wyżej]
Voila! Pojawiły się. Chociaż nawet nie wiedziałem że boola da się porównać do 19...
Potem zrobiłem coś, co jeszcze bardziej mnie zadziwiło
if( up == 19 ) al_draw_filled_circle( pos.x, pos.y, mass, al_map_rgb( 255, 0, 0 ) );
Kółko nie pojawiło się.
Za to z loga debuggera wynikało że zmienna left się włączyła. Nie wiadomo skąd. Nawet wcześniej była zero..
Wychodzi na to że owy "printf" powoduje że komputer zaczyna liczyć nonadecylarnie(?).
Usunąłem ten warunek, teraz sprawdziłem znowu, uruchomiłem program, nagle debugger pokazuje że wszystkie zmienne na true. Bez robienia zmian. Co to może być...
No i opisałem moją sytuację. Czy ktokolwiek spotkał się z czymś takim? Jeśli tak, to jest sposób jak na to zaradzić? Sam nie mam zielonego pojęcia, dlaczego się to robi, ale wiem że mimo tego iż w konstruktorze obiektu było jasno żeby wszystkie boole z góry były false, to kompilator nie chce się słuchać, i ustawia na true. Za pomoc z góry dziękuje.