Fofokus Temat założony przez niniejszego użytkownika |
[C++, Allegro] Co zrobić, żeby określić, że jedna bitmapa leży na drugiej (problem natury technicznej) » 2014-02-19 20:05:44 Witam, sorki za troszkę nieprzejrzysty tytuł, ale nie wiedziałem jak to ubrać w słowa. Otóż sprawa ma się tak: przebrnąwszy przez podstawy allegro, postanowiłem, że dla przypomnienia całego materiału napiszę sobie małą gierkę. Chodzi w niej o to, że naprzeciw siebie stoją sobie dwa ludziki i miotają w siebie kulami ognia (jeden ma ograniczone pole ruchu, a drugi nie [ nie chciało mi się robić tego u drugiego ludka :P] podobnie z tym "miotaniem kul", tą umiejętność także posiada tylko jeden z nich, ale to nie jest istotne. Rzecz w tym, że nie wiem co zrobić, żeby dać do zrozumienia kompilatorowi, że kula zderzyła się z ludzikiem. if( chlopek2_x == kula_x && chlopek2_y == kula_y ) return 0; ująłem to tak, czyli jeśli ludzik oberwie kulą to program się zamknie... no właśnie. Kula musi uderzyć w dokładnie jeden konkrety punkt, a chciałbym, żeby przy uderzeniu w jakikolwiek punkt bitmapy, jaką jest ludzik wykonywała się instrukcja return 0;. Chciałem to wygooglować, ale trudno było mi znaleźć słowo klucz tego problemu, toteż wyniki były raczej mierne. |
|
Fofokus Temat założony przez niniejszego użytkownika |
» 2014-02-19 20:11:11 #include <allegro.h> int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1200, 800, 0, 0 ); BITMAP * chlopek = load_bmp( "chlopek.bmp", NULL ); BITMAP * chlopek2 = load_bmp( "chlopek2.bmp", NULL ); BITMAP * kula = load_bmp( "kula.bmp", NULL ); BITMAP * bufor = create_bitmap( 1200, 800 ); clear_to_color( bufor, makecol( 0, 255, 0 ) ); int chlopek_x = 0, chlopek_y = 0, chlopek2_x = 1000, chlopek2_y = 300, kula_x = chlopek_x + 20, kula_y = chlopek_y + 20; int pozycja = 0; bool kulax = false; while( !key[ KEY_ESC ] ) { if( key[ KEY_W ] && chlopek_y > 0 ) { chlopek_y--; kula_y--; } if( key[ KEY_S ] && chlopek_y < 650 ) { chlopek_y++; kula_y++; } if( key[ KEY_D ] && chlopek_x < 200 ) { chlopek_x++; kula_x++; } if( key[ KEY_A ] && chlopek_x > 0 ) { chlopek_x--; kula_x--; } if( key[ KEY_UP ] ) chlopek2_y--; if( key[ KEY_DOWN ] ) chlopek2_y++; if( key[ KEY_RIGHT ] ) chlopek2_x++; if( key[ KEY_LEFT ] ) chlopek2_x--; if( key[ KEY_X ] ) { kulax = true; } if( kulax ) { masked_blit( kula, bufor, 0, 0, kula_x, kula_y, kula->w, kula->h ); kula_x = kula_x + 10; masked_blit( kula, bufor, 0, 0, kula_x, kula_y, kula->w, kula->h ); if( kula_x >= 1200 ) kulax = false; } else { kula_x = chlopek_x + 20; kula_y = chlopek_y + 20; } if( chlopek2_x == kula_x && chlopek2_y == kula_y ) return 0; blit( bufor, screen, 0, 0, 0, 0, 1200, 800 ); clear_to_color( bufor, makecol( 0, 255, 0 ) ); masked_blit( chlopek, bufor, pozycja, 0, chlopek_x, chlopek_y, 200, 200 ); masked_blit( chlopek2, bufor, 0, 0, chlopek2_x, chlopek2_y, chlopek2->w, chlopek2->h ); } readkey(); allegro_exit(); } END_OF_MAIN();
tutaj kodzik, byłbym także wdzięczny za jakieś sugestie co do poprawy kodu, bo jestem początkujący w Allegro i często słyszę, że w moim kodzie można coś pozamieniać, żeby działał szybciej (np ktoś kiedyś tłumaczył, żeby nie używać load_bmp wewnątrz głównej pętli, tylko na zewnątrz, bo inaczej program będzie działał wolniej) |
|
maly |
» 2014-02-19 20:48:58 |
|
Fofokus Temat założony przez niniejszego użytkownika |
» 2014-02-19 21:38:06 Dzięki bardzo. Już wiem gdzie szukać :)
|
|
« 1 » |