Salve. Sto letteralmente impazzendo: è da giorni che sto cercando guide sulla collisione, e tutte mi dicono più o meno la stessa cosa: per far collidere due oggetti bisogna costruire attorno ad essi dei rettangoli e, se questi si toccano avviene la collisione.
vi posto il codice che mi sta facendo uscire di testa.
Quale è l'errore??? vi prego, sto impazzendocodice:#include <allegro.h> BITMAP *buf, *sprite, *sfondo, *cattivo; PALETTE color; int x, y, xcattivo, ycattivo ; int morto = 1; void nemico() { draw_sprite (buf, cattivo, xcattivo, ycattivo); } void db() { vsync(); blit (buf, screen, 0, 0, 0, 0, 600, 300); clear(buf); } void giocatore() { if (morto == 1) { draw_sprite(buf, sprite, x, y); } } void sfondo1() { blit (sfondo, buf, 0, 0, 0, 0, 600, 300); } void movimento() { if (key[KEY_UP]) y -= 3; if (key[KEY_DOWN]) y += 3; if (key[KEY_LEFT]) x -= 3; if (key[KEY_RIGHT]) x += 3; } void collisione() { nt lato_dx1 = x + 10; //questo è il punto destro del lato dx del rettangolo immaginario del 1 int lato_sx1 = x - 10;// questo quello sx int lato_up1 = y - 10;// sopra int lato_dow1 = y + 10;// sotto // processo analogo a quello sopra int lato_dx2 = xcattivo + 10; int lato_sx2 = xcattivo - 10; int lato_up2 = ycattivo - 10; int lato_dow2 = ycattivo + 10; if ((lato_dx1 >= lato_sx2) && (lato_dx1 <= lato_dx2)) { if ((lato_up1 >= lato_up2) && (lato_up1 <= lato_dow2 )) { morto = 0; } else if ((lato_dow1 <= lato_dow2 ) && (lato_dow1 >= lato_up2)) { morto = 0; } } else { morto = 1; } } int main() { allegro_init(); install_keyboard(); set_color_depth(32); set_pallete(color); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 600, 300, 0, 0); buf = create_bitmap(600, 300); clear(buf); x = 50; y = 50; xcattivo = 200; ycattivo = 100; while (!key[KEY_ESC]) { sprite = load_bmp ("immagine.bmp", color); sfondo = load_bitmap ("sfondo.bmp", color); cattivo = load_bmp ("nemico.bmp", color); db(); sfondo1(); giocatore(); nemico(); movimento(); collisione(); } destroy_bitmap (buf); destroy_bitmap (sfondo); destroy_bitmap (sprite); destroy_bitmap(cattivo); return 0; } END_OF_MAIN();![]()

Rispondi quotando