SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++, Allegro] Kolizja - getpixel() z bitmapą... » 2010-07-24 15:06:03 Wiem, wiem, na tym forum oraz na google są miliony tematów na temat kolizji w Allegro... Sam spędziłem dzisiaj od rana do teraz (nie licząc wczorajszego dnia... ) na szukaniu jak to zrobić bo mi coś nie działa zbytnio :D Tutaj pętla odpowiedzialna za poruszanie się: while( speed > 0 ) { if( ludek1_x >= 800 ) { ludek1_x -= 10; } else if( ludek1_x <= 0 ) { ludek1_x += 10; } else if( ludek1_y >= 600 ) { ludek1_y -= 10; } else if( ludek1_y <= 0 ) { ludek1_y += 10; } if( key[ KEY_A ] ) { if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) { ludek1_x += 5; } else { ludek1_x--; } } if( key[ KEY_D ] ) { if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) { ludek1_x -= 5; } else { ludek1_x++; } } if( key[ KEY_W ] ) { if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) { ludek1_y += 5; } else { ludek1_y--; } } if( key[ KEY_S ] ) { if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) { ludek1_y -= 5; } else { ludek1_y++; } } speed--; }
Kolizja ma być wtedy gdy postać najedzie na niebieski kolor. Tworze taki mini symulator życia i niebieski kolor mają ściany na razie -> Tutaj zdjecie gdzie ma zachodzic kolizja...Proszę o pomoc! Według mnie kolizja powinna zachodzić i o dziwo zachodzi gdy nacisnę A+W albo A+S... Bez Was nic nie wykombinuję... |
|
lenrokskate |
» 2010-07-24 15:13:45 |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2010-07-24 15:15:30 @up - wczoraj akurat na to patrzyłem :P I sobie ściągnąłem nawet ten materiał z Download :D Tylko kurde nic obczaić nie mogę... :D A nie da się zrobić tak jak ja mam tylko jakoś poprawnie??? :) |
|
malan |
» 2010-07-24 15:53:00 Domyślam się, że "postać" to ten prostokąt szary? :) while( speed > 0 ) { if( getpixel( bufor, ludek1_x, ludek1_y ) != makecol( 0, 0, 255 ) ) { if( key[ KEY_W ] ) if( ludek1_y >= 0 ) ludek1_y--; if( key[ KEY_S ] ) if( ludek1_y <= 600 ) ludek1_y++; if( key[ KEY_A ] ) if( ludek1_x >= 0 ) ludek1_x--; if( key[ KEY_D ] ) if( ludek1_x <= 800 ) ludek1_x++; } speed--; } Działa? |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2010-07-24 16:11:56 Tam nie widać wszystkiego. Tutaj jest całe okienko :) -> http://img820.imageshack.us/f/zdjeciegry.jpg/@up: kolizja działa tylko z górną i lewą stroną okienka :) A z tym niebieskim to nadal nie działa :( Ten kod co ja napisałem, to o dziwo kolizja następuje z tymi niebieskimi napisami współrzędnych gracza X i Y... Wie ktoś czemu te getpixel nie działa z bitmapą???????!!!! |
|
malan |
» 2010-07-24 16:19:35 To pozmieniaj sobie wartości w ifach. if( key[ KEY_W ] ) if( ludek1_y >= plansza_y_min ) ludek1_y--;
if( key[ KEY_S ] ) if( ludek1_y <= plansza_y_max ) ludek1_y++;
if( key[ KEY_A ] ) if( ludek1_x >= plansza_x_min ) ludek1_x--;
if( key[ KEY_D ] ) if( ludek1_x <= plansza_x_max ) ludek1_x++;
|
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2010-07-24 16:27:18 Robiąc tak: while( speed > 0 ) { if( getpixel( bufor, ludek1_x, ludek1_y ) != makecol( 0, 0, 255 ) ) { if( key[ KEY_W ] ) if( ludek1_y >= 0 ) ludek1_y--; if( key[ KEY_S ] ) if( ludek1_y <= 590 ) ludek1_y++; if( key[ KEY_A ] ) if( ludek1_x >= 0 ) ludek1_x--; if( key[ KEY_D ] ) if( ludek1_x <= 790 ) ludek1_x++; } speed--; }
Owszem, postać (znaczy się ten żółty kwadrat :)) już nie wyłazi poza ekran ani się nie cofa, lecz nadal wchodzi na niebieski kolor. Nie wiem co jest źle... może te getpixel nie odczytuje koloru z bitmapy? :) Albo paint nie pokazuje prawidłowych wartości koloru i te ściany nie mają 0,0,255 tylko np 0,0,250... :P Musze sprawdzić:D #edit: jednak ściany mają 0,0,255. A może ktoś wie czy np poprzez wyświetlanie w Allegro zmieniają się wartości koloru? Bo wtedy wiedziałbym co jest źle :D :P |
|
malan |
» 2010-07-24 16:39:28 Eh. Daj kod, w którym wyświetlasz tą planszę (z niebieskimi ścianami) na bufor. |
|
« 1 » 2 |