Loodwin Temat założony przez niniejszego użytkownika |
[Allegro] Problem z zatrzymaniem postaci » 2013-02-10 18:29:37 Witam! Zająłem się ostatnio kolizjami i chciałem zrobić, aby postać nie mogła się poruszyć w tą samą stronę, z której przybyła, gdy będzie kolizja. I wszystko działa, gdy podchodzi się z góry i od dołu, lecz gdy idzie się z lewej, albo prawej to postać zatrzymuje się i nie można nią ruszyć w jakąkolwiek stronę. Tutaj są części kodu dotyczące tylko tego, bo uważam, że bez sensu cały kod umieszczać. bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 ) { if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return true; else return false; };
while( speed > 0 ) { myszka(); if( !key[ KEY_RIGHT ] && canright == true ) { ludek_x--; lastmove = 1; } if( !key[ KEY_LEFT ] && canleft == true ) { ludek_x++; lastmove = 2; } if( !key[ KEY_UP ] && canup == true ) { ludek_y++; lastmove = 3; } if( !key[ KEY_DOWN ] && candown == true ) { ludek_y--; lastmove = 4; } if( kolizja( ludek_x, ludek_y, 40, 55, 250, 250, 60, 60 ) == false ) { canright = true; canleft = true; canup = true; candown = true; } speed--; frame++; if( frame > 100 ) frame = 0; }
if( kolizja( ludek_x, ludek_y, 40, 55, 250, 250, 60, 60 ) == true ) { if( lastmove == 1 ) { canright = false; } else if( lastmove == 2 ) { canleft = false; } else if( lastmove == 3 ) { canup = false; } else if( lastmove == 4 ) { candown = false; } textprintf_ex( bufor, font, 40, 40, makecol( 200, 200, 200 ), - 1, "Kolizja!" ); }
lastmove = 0;
Z góry dzięki za pomoc! |
|
DejaVu |
» 2013-02-10 21:13:05 zanim wykonasz ruch musisz sprawdzić czy jego wykonanie jest możliwe. Jeżeli wykonasz ruch, a będzie kolizja to nie będziesz mógł z niej wyjść. |
|
Loodwin Temat założony przez niniejszego użytkownika |
Jest coś takiego » 2013-02-11 11:07:20 Przecież jest coś takiego: if( !key[ KEY_RIGHT ] && canright == true ) { ludek_x--; lastmove = 1; } if( !key[ KEY_LEFT ] && canleft == true ) { ludek_x++; lastmove = 2; } if( !key[ KEY_UP ] && canup == true ) { ludek_y++; lastmove = 3; } if( !key[ KEY_DOWN ] && candown == true ) { ludek_y--; lastmove = 4; }
Zmienne canleft,canright itd. określają czy można wykonać ruch. Np. jeśli canright ma wartość true to można wykonać ruch, a jeśli false to nie można. Tak naprawdę to nie w tym problem, bo gdy idzie się z góry i z dołu to wszystko działa, a jeśli z prawej lub z lewej to wtedy nie można się ruszyć. Napisałem o tym w poprzednim poście. Cały czas sam próbuje to rozwiązać, ale nie wiem jak. |
|
RazzorFlame |
» 2013-02-11 17:02:45 Ahh ludzie, czy większość z was naprawde sama się nie umie wysilić? Rozumiem, gdyby to było bardziej rozbudowane, ale jestem pewien że po prostu skopiowałeś to z kursu easykodera. To nie jest rozwiązanie na twoje problemy. I czemu kiedy nie naciskasz klawisza ma on chodzic (!key[KEY_LEFT] i reszta)? |
|
Loodwin Temat założony przez niniejszego użytkownika |
» 2013-02-11 21:14:42 @up: Dzięki. Czytając kurs też na początku się zdziwiłem, że jest tam "!", ale widząc to tak to myślałem, że tak ma być. Usunięcie wykrzyknika pomogło. Jeszcze raz dzięki. P.S Tak naprawdę nie kopiowałem tylko sam pisałem, ale tak naprawdę to co tam było. |
|
« 1 » |