[Allegro] Funkcja stopująca
Ostatnio zmodyfikowano 2008-08-20 18:26
Patzick Temat założony przez niniejszego użytkownika |
[Allegro] Funkcja stopująca » 2008-08-19 20:03:17 Problem polega na tym, że ludzik za szybko chodzi mi po mapie, timer mam ustawiony na BPS_TO_TIMER(80) gdy zmniejszam może i ludzik mi chodzi wolniej ale zaczyna klatkować całą grę. W dokumentacji przeczytałem o funkcji rest (void rest(unsigned int time);), ale za nic nie chce mi zadziałać. Może pokażę na fragmencie kodu. if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; mapa_x = mapa_x - 1; rest( unsigned int 60 ); } Znając życie coś nie tak zrobiłem ze składnią tej komendy, ale i tak warto wspomnieć o niej wspomnieć bo często może się przydać :) |
|
DejaVu |
» 2008-08-19 20:15:05 Aby funkcja rest() działała musisz wywołać na początku programu funkcję: install_timer(); |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-08-19 20:47:13 mam użytą tą funkcję. Wyskakuje main.cpp: In function `int _mangled_main()': main.cpp:144: error: expected primary-expression before "int"
make.exe: *** [main.o] Error 1
|
|
DeBugger |
» 2008-08-20 13:38:39 Możesz podać log kompilacji? |
|
DejaVu |
» 2008-08-20 14:22:20 Wklej wiersze kodu od 142 do 146. |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-08-20 16:06:29 Z kodem ogólnie jest ok, ale proszę while( speed > 0 ) { if( ludek.x < 0 ) ludek.x = 0; if( ludek.x > 640 ) ludek.x = 640; if( ludek.y < 0 ) ludek.y = 0; if( ludek.y > 480 ) ludek.y = 480; ludek.klatka = 1; if( key[ KEY_LEFT ] &&( mapa_x > 0 ) ) { ludek.kierunek = 2; mapa_x = mapa_x - 1; rest( unsigned int 60 ); } if( key[ KEY_RIGHT ] &&( mapa_x < 22 ) ) { ludek.kierunek = 1; mapa_x = mapa_x + 1; } if( key[ KEY_UP ] &&( mapa_y > 0 ) ) { ludek.kierunek = 3; mapa_y = mapa_y - 1; } if( key[ KEY_DOWN ] &&( mapa_y < 22 ) ) { ludek.kierunek = 0; mapa_y = mapa_y + 1; } speed--; frame++; if( frame > 40 ) frame = 0; }
źle działa tylko ta funkcja rest, bez tego wszystko działa, ale ludzik zbyt szybko chodzi. A oto log kompilacji (chyba poprzednio wystarczająco go dałem, ale tu cały) Kompilator: Default compiler Building Makefile: "C:\Users\Admin\Desktop\P4TRYK\projekty\gra\Makefile.win" Wykonywanie make... make.exe -f "C:\Users\Admin\Desktop\P4TRYK\projekty\gra\Makefile.win" all g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -DALLEGRO_STATICLINK
main.cpp: In function `int _mangled_main()': main.cpp:144: error: expected primary-expression before "unsigned"
make.exe: *** [main.o] Error 1
Wykonanie zakończone Mam nadzieję, że dzięki temu już będziecie wiedzieli o co chodzi :) |
|
DejaVu |
» 2008-08-20 17:07:35 Nie wiem skąd taki zapis wytrzasnąłeś: rest( unsigned int 60 ); To powinno wyglądać tak: rest( 60 ); Lub jeśli chcesz koniecznie rzutować typ to tak: rest(( unsigned int ) 60 ); Lub tak: rest( static_cast < unsigned int >( 60 ) ); |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-08-20 17:44:15 ok, wiedziałem, że coś pokręciłem z funkcją. niby działa, ale to nie rozwiązało mojego problemu. Gdy chcę, żeby ludzik szedł w lewo i wciskam raz strzałkę, to robi 1 kratkę mapy, tak jak powinien. Lecz gdy trzymam strzałkę cały czas to zwiesza się w miejscu i pojawia się jakiś kawałek dalej mapy. Co więc zrobić, żeby zwolnić tego ludka?
EDIT//
Uznałem, że zmniejszenie timera będzie najbardziej odpowiednie do sytuacji. Wielkie dzięki za pomoc :) |
|
« 1 » 2 |