Forczek Temat założony przez niniejszego użytkownika |
[Allegro] Menu i Kolizja » 2012-08-03 20:51:04 Witam wszystkich. Od razu do rzeczy, piszę pewną grę i zacząłem od menu. Problem jest z kolizją. Może najpierw dam cały kod: #include <allegro.h>
volatile long speed = 0;
void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int mx = 0, my = 0, mb = 0;
void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
short int Kolizja( short int x1, short int x2, short int y1, short int y2, short int width1, short int width2, short int height1, short int height2 );
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1000, 800, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) ); BITMAP * kursor = NULL; kursor = load_bmp( "kursor.bmp", default_palette ); install_mouse(); set_mouse_sprite( kursor ); unscare_mouse(); BITMAP * bufor = NULL; BITMAP * Menu = NULL; BITMAP * wiking = NULL; BITMAP * przycisk01 = NULL; BITMAP * przycisk02 = NULL; BITMAP * przycisk03 = NULL; BITMAP * przycisk04 = NULL; BITMAP * przycisk05 = NULL; BITMAP * przycisk11 = NULL; BITMAP * przycisk12 = NULL; BITMAP * przycisk13 = NULL; BITMAP * przycisk14 = NULL; BITMAP * przycisk15 = NULL; bufor = create_bitmap( 1000, 800 ); przycisk01 = load_bmp( "przycisk1.bmp", default_palette ); przycisk02 = load_bmp( "przycisk1.bmp", default_palette ); przycisk03 = load_bmp( "przycisk1.bmp", default_palette ); przycisk04 = load_bmp( "przycisk1.bmp", default_palette ); przycisk05 = load_bmp( "przycisk1.bmp", default_palette ); przycisk11 = load_bmp( "przycisk2.bmp", default_palette ); przycisk12 = load_bmp( "przycisk2.bmp", default_palette ); przycisk13 = load_bmp( "przycisk2.bmp", default_palette ); przycisk14 = load_bmp( "przycisk2.bmp", default_palette ); przycisk15 = load_bmp( "przycisk2.bmp", default_palette ); wiking = load_bmp( "wiking.bmp", default_palette ); Menu = load_bmp( "Menu.bmp", default_palette ); int menu = 1; int wiking_x = 575, wiking_y = 275; int frame = 0; double kolizja = false; while( menu == 0 ) { while( speed > 0 ) { if( menu == 1 ) { if( Kolizja( 500, mouse_x, 550, mouse_y, przycisk01->w, kursor->w, przycisk01->h, kursor->h ) != 0 ) { masked_blit( przycisk11, Menu, 0, 0, 500, 500, przycisk11->w, przycisk11->h ); textprintf_ex( przycisk11, font, 600, 500, makecol( 0, 0, 255 ), - 1, "Nowa Gra" ); if( mb == 1 ) { menu = 2; } } else { masked_blit( przycisk01, Menu, 0, 0, 500, 500, przycisk01->w, przycisk01->h ); textprintf_ex( przycisk01, font, 600, 500, makecol( 0, 0, 255 ), - 1, "Nowa Gra" ); } if( Kolizja( 500, mouse_x, 450, mouse_y, przycisk01->w, kursor->w, przycisk01->h, kursor->h ) != 0 ) { masked_blit( przycisk12, Menu, 0, 0, 500, 450, przycisk11->w, przycisk11->h ); textprintf_ex( przycisk02, font, 600, 450, makecol( 0, 0, 255 ), - 1, "Wczytaj Gre" ); if( mb == 1 ) { menu = 3; } } else { masked_blit( przycisk02, Menu, 0, 0, 500, 450, przycisk01->w, przycisk01->h ); textprintf_ex( przycisk12, font, 600, 450, makecol( 0, 0, 255 ), - 1, "Wczytaj Gre" ); } if( Kolizja( 500, mouse_x, 400, mouse_y, przycisk01->w, kursor->w, przycisk01->h, kursor->h ) != 0 ) { masked_blit( przycisk13, Menu, 0, 0, 500, 400, przycisk11->w, przycisk11->h ); textprintf_ex( przycisk03, font, 600, 400, makecol( 0, 0, 255 ), - 1, "Pomoc" ); if( mb == 1 ) { menu = 4; } } else { masked_blit( przycisk03, Menu, 0, 0, 500, 400, przycisk01->w, przycisk01->h ); textprintf_ex( przycisk13, font, 600, 400, makecol( 0, 0, 255 ), - 1, "Pomoc" ); } if( Kolizja( 500, mouse_x, 350, mouse_y, przycisk01->w, kursor->w, przycisk01->h, kursor->h ) != 0 ) { masked_blit( przycisk14, Menu, 0, 0, 500, 350, przycisk11->w, przycisk11->h ); textprintf_ex( przycisk04, font, 600, 350, makecol( 0, 0, 255 ), - 1, "Autorzy" ); if( mb == 1 ) { menu = 5; } } else { masked_blit( przycisk04, Menu, 0, 0, 500, 350, przycisk01->w, przycisk01->h ); textprintf_ex( przycisk14, font, 600, 350, makecol( 0, 0, 255 ), - 1, "Autorzy" ); } if( Kolizja( 500, mouse_x, 300, mouse_y, przycisk01->w, kursor->w, przycisk01->h, kursor->h ) != 0 ) { masked_blit( przycisk05, bufor, 0, 0, 500, 300, przycisk05->w, przycisk05->h ); textprintf_ex( przycisk05, font, 600, 300, makecol( 0, 0, 255 ), - 1, "Wyjscie" ); if( mb == 1 ) { menu = 0; } } else { masked_blit( przycisk15, bufor, 0, 0, 500, 300, przycisk05->w, przycisk05->h ); textprintf_ex( przycisk15, font, 600, 300, makecol( 0, 0, 255 ), - 1, "Wyjscie" ); } } speed--; frame++; } clear_to_color( bufor, makecol( 150, 150, 150 ) ); blit( bufor, screen, 0, 0, 0, 0, 1000, 800 ); } remove_int( increment_speed ); destroy_bitmap( wiking ); destroy_bitmap( przycisk01 ); destroy_bitmap( przycisk02 ); destroy_bitmap( przycisk03 ); destroy_bitmap( przycisk04 ); destroy_bitmap( przycisk05 ); destroy_bitmap( przycisk11 ); destroy_bitmap( przycisk12 ); destroy_bitmap( przycisk13 ); destroy_bitmap( przycisk14 ); destroy_bitmap( przycisk15 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
Problem mam z kolizją, w poprzedniej grze działała według tego kodu. Teraz nie działa. Co jest nie tak, oto błąd: undefined reference to 'Kolizja( short, short...., short)' |