Opa Boa noite , estou a realizar um projeto usando Allegro 5. na parte de movimentar o sprite eu consegui fazer mas ele não apaga
os sprites anteriores. segue imagens e códigos.
void moviment_pac::direcao_personagem(ALLEGRO_EVENT ev,ALLEGRO_BITMAP* movi,int* x,int* y){
int i = 0, j = 0;
int tempo, sprite = 0, fator = 1;
if(ev.type == ALLEGRO_EVENT_KEY_DOWN){
switch(ev.keyboard.keycode){
case ALLEGRO_KEY_UP:
tecla[KUP] = true;
if(*y <= 32.0)
*y+=32;
else
*y-=32;
sprite=2;
//al_draw_bitmap_region(movi,0,2*32,32,32,*x,*y,0);
break;
case ALLEGRO_KEY_DOWN:
tecla[KDOWN] = true;
if(*y >= 672 - 32 - 32 )
*y-=32;
else
*y+=32;
sprite = 4;
//al_draw_bitmap_region(movi,0,4*32,32,32,*x,*y,0);
break;
case ALLEGRO_KEY_RIGHT:
tecla[KRIGHT] = true;
if(*x >= 672 - 32 - 32)
*x-=32;
else
*x+=32;
sprite = 3;
//al_draw_bitmap_region(movi,0,3*32,32,32,*x,*y,0);
break;
case ALLEGRO_KEY_LEFT:
tecla[KLEFT] = true;
if(*x <= 32)
*x+=32;
else
*x-=32;
sprite = 1;
//al_draw_bitmap_region(movi,0,1*32,32,32,*x,*y,0);
break;
}
al_draw_bitmap_region(movi,0,sprite*32,32,32,*x,*y,0);
}
else if(ev.type == ALLEGRO_EVENT_KEY_UP){
switch(ev.keyboard.keycode){
case ALLEGRO_KEY_RIGHT:
tecla[KRIGHT] = false;
break;
case ALLEGRO_KEY_LEFT:
tecla[KLEFT] = false;
break;
case ALLEGRO_KEY_UP:
tecla[KUP] = false;
break;
case ALLEGRO_KEY_DOWN:
tecla[KDOWN] = false;
break;
}
}
}
//Código de movimentar
//Main.cpp
while(!fim_loop){
//printf("pos_x: %.2f pos_y: %.2f\n", posi_x,posi_y);
tempo = al_get_timer_count(FPS);
al_wait_for_event(fila_events, &event);
//qual evento
if(event.type == ALLEGRO_EVENT_TIMER){
test = true;
}
if(event.type == ALLEGRO_EVENT_KEY_DOWN){
/*pacm = al_load_bitmap("Sprites/Personagens/Voltorb/VoltorbD.png");
movi.movi_direita(pacm,event);
pacm = al_load_bitmap("Sprites/Personagens/Voltorb/VoltorbE.png");
movi.movi_esquerda(pacm,event);
pacm = al_load_bitmap("Sprites/Personagens/Voltorb/VoltorbB.png");
movi.movi_cima(pacm,event);
pacm = al_load_bitmap("Sprites/Personagens/Voltorb/VoltorbF1.png");
movi.movi_baixo(pacm,event);*/
//movi.direcao_personagem(event,pacm,&x,&y);
movi.direcao_personagem(event,pacm,&x,&y);
switch(event.keyboard.keycode){
case ALLEGRO_KEY_ENTER:
teclas[KEY_ENTER] = true; ///quando apertado, vira true.
movi.startMap(mapa);
// movi.TImprimir();
if(music != NULL){
al_destroy_audio_stream(music); ///musica do menu para.
music = NULL;
}
al_clear_to_color(al_map_rgb(0,0,0));
al_draw_bitmap(fundo,0,0,0);
al_draw_bitmap(borda,0,0,0);
p.desenha_pilu(pilu);
t.desenha_tijo(tijo);
movi.teste_pac(pacm, &posi_x, &posi_y);
break;
default:
break;
} //se o evento é algo relacionado a alguma tecla apertada
}
else if(event.type == ALLEGRO_EVENT_DISPLAY_CLOSE || event.keyboard.keycode == ALLEGRO_KEY_ESCAPE){
fim_loop = true; ///clicando com no X;
}
if(test && al_is_event_queue_empty(fila_events)){
test = false;
al_draw_bitmap(pacm,posi_x,posi_y,0);
movi.startMap(mapa);
al_flip_display();
}
}
Eu so fiz a colisão das bordas, ainda falta dos tijolos em si dentro do mapa, mas queria resolver esse problema de não apagar, por que o al_flip_display() era para estar realizando isso.