kiler69 Temat założony przez niniejszego użytkownika |
[Allegro] Problem z podskokiem postaci » 2009-08-12 17:46:36 Witam. Z biblioteki allegro korzystam dopiero kilka dni wiec prosze o wyrozumialosc. Pisze prosta gre, a wlasciwie to bawie sie kodem, bo do gry to jeszcze duzo brakuje ;) i mam taki problem, ze gdy postac ma skoczyc to jest wszystko ok, ale niepotrzebnie rusza nogami w powietrzu, wiec postanowilem zmienic wyswietlana animacje podczas skoku. Po tej zmianie gdy postac skacze w miejscu to znika z ekranu, a gdy skacze w prawo lub w lewo to jest ok. Oto kod z miejscem, w ktorym poruszam postacią: void petla() { int mozna_rysowac = 0; int licznik = 0; bool skok = false; bool spadanie = false; while( !key[ KEY_ESC ] ) { if( opuznienie ) { if( key[ KEY_LEFT ] ) { if( ludek_x > 0 ) ludek_x -= 8; ludek_kierunek = 0; mozna_rysowac = 1; if( pozycja_tla > 200 ) pozycja_tla -= 8; } if( key[ KEY_RIGHT ] ) { if( ludek_x < 400 ) ludek_x += 8; ludek_kierunek = 1; mozna_rysowac = 1; if( pozycja_tla < 600 ) pozycja_tla += 8; else if( ludek_x < 660 ) ludek_x += 8; } if( key[ KEY_SPACE ] && licznik == 0 ) { skok = true; licznik += 1; } if( skok == true ) { ludek_y -= 10; mozna_rysowac = 1; } if( ludek_y <= 300 && skok == true ) { skok = false; spadanie = true; } if( spadanie == true ) { ludek_y += 10; mozna_rysowac = 1; } if( ludek_y == 370 ) { ludek_y = 370; spadanie = false; licznik = 0; } if( mozna_rysowac == 1 ) { mozna_rysowac = 0; rysuj(); } opuznienie = 0; } } } a to funkcja do obslugi animacji: void rysuj_ludka() { if( ludek_kierunek == 0 ) { draw_sprite( bufor_ekranu, ludek[ 3 + ludek_numer_klatki ], ludek_x, ludek_y ); } else if( ludek_kierunek == 1 ) { draw_sprite( bufor_ekranu, ludek[ ludek_numer_klatki ], ludek_x, ludek_y ); } else if( ludek_kierunek == 2 ) { draw_sprite( bufor_ekranu, ludek[ 5 ], ludek_x, ludek_y ); } else if( ludek_kierunek == 3 ) { draw_sprite( bufor_ekranu, ludek[ 2 ], ludek_x, ludek_y ); } } Prosze o pomoc w znalezieniu bledu. Pozdrawiam... :) |
|
malan |
» 2009-08-12 17:52:54 Pierwsze co mi się rzuciło w oczy to: if( key[ KEY_SPACE ] && licznik == 0 ) { skok = true; licznik += 1; }
Jeśli za skok odpowiada spacja to brakuje tu (prawdopodobnie) 'moznarysowac=1;. |
|
kiler69 Temat założony przez niniejszego użytkownika |
» 2009-08-12 18:09:04 Niestety to nic nie dało, a pozwolenie na rysowanie mam zaraz po zmianie pozycji postaci: if( skok == true ) { ludek_kierunek += 2; ludek_y -= 10; mozna_rysowac = 1; } Patrz jeden IF nizej. |
|
szyx_yankez |
» 2009-08-12 19:02:21 Ja bym to zrobił tak tylko że np do skoku w lewo musisz nacisnąć spacje i strzałkę w lewo int poziomgruntu = 200;
if( key[ KEY_SPACE ] && key[ KEY_RIGHT ] && ludek_y == poziomgruntu ) { predkosc =- 10; predkoscx =- 2; } ludek_y += predkosc; ludek_x -= predkoscx; predkosc += 0.3; if( ludek_y >= poziomgruntu ) { predkosc = 0; predkoscx = 0; ludek_y = poziomgruntu; }
if( key[ KEY_SPACE ] && key[ KEY_LEFT ] && ludek_y == poziomgruntu ) { predkosc =- 10; predkoscx =+ 2; } ludek_y += predkosc; ludek_x -= predkoscx; predkosc += 0.3; if( ludek_y >= poziomgruntu ) { predkosc = 0; predkoscx = 0; ludek_y = poziomgruntu; }
|
|
kiler69 Temat założony przez niniejszego użytkownika |
» 2009-08-12 22:44:02 Tez nie bardzo, albo zle łącze to z moim kodem. Gdzie sa deklaracje predkosc i predkoscx i co maja miec zainicjalizowane? W moim przykladzie tez trzeba spacje i strzalke wciskac, ale tak ma byc wiec to jest dobrze. Chodzi o to, ze jak wcisne tylko spacje, to powinien podskoczyc w miejscu, a zamiast tego postac znika z ekranu i pojawia sie dopiero jak wcisne strzalke. Tak jakby gdzie brakowalo odswiezenia bufora, tylko nie wiem gdzie. Powtarzam, ze ten problem pojawia sie tylko przy skoku w miejscu, a jak skacze w bok (np. spacja+key_right) to jest wszystko ok. |
|
DejaVu |
» 2009-08-13 00:07:26 Ja bym się wogóle pozbył: Uważam, że jest to zbędne. Ekran powinien zawsze być odświeżany, więc i ludek powinien być zawsze rysowany. |
|
kiler69 Temat założony przez niniejszego użytkownika |
» 2009-08-13 13:05:49 Nie wiem, ale to tez nic nie dało. Ekran odswiezam tylko jak ludek zrobi ruch, zeby niepotrzebnie nie ruszał nogami w miejscu. |
|
« 1 » |