Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Funkcja stopująca

Ostatnio zmodyfikowano 2008-08-20 18:26
Autor Wiadomość
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ć :)
P-1374
DejaVu
» 2008-08-19 20:15:05
Aby funkcja rest() działała musisz wywołać na początku programu funkcję:
install_timer();
P-1375
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
P-1376
DeBugger
» 2008-08-20 13:38:39
Możesz podać log kompilacji?
P-1383
DejaVu
» 2008-08-20 14:22:20
Wklej wiersze kodu od 142 do 146.
P-1389
Patzick
Temat założony przez niniejszego użytkownika
» 2008-08-20 16:06:29
Z kodem ogólnie jest ok, ale proszę

C/C++
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 :)
P-1394
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 ) );

P-1395
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 :)
P-1396
« 1 » 2
  Strona 1 z 2 Następna strona