alex331501
-
Modifié par alex331501 le 25/06/2011 à 19:15
Pour un programme que je fait avec la bibliothèque allegro j'aurais besoin de blitter plusieur fois mais quand il y a deux blit l'ecran laisse des marque noir voici le code ou il y a les deux blittage:
#ifndef LOOP_C_INCLUDED
#define LOOP_C_INCLUDED
#include <allegro.h>
#include "define.h"
void mainloop(BITMAP* buffer, BITMAP* souris, FONT* ecr)
{
int r = 255, g = 0, b = 0, choix = 0, taille = 1;
clear_to_color(buffer, makecol(blanc));
show_mouse(souris);
while(!key[KEY_ENTER])
{
if(key[KEY_ESC])
return 0;
text_mode(-1);
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 - 200, makecol(rouge), "Cree par alexandre");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 - 150, makecol(rouge), "s: enregistrer");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 - 100, makecol(rouge), "l: ouvrir bmp dessin.bmp");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 - 50, makecol(rouge), "a/q: afficher/cacher le curseur");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2, makecol(rouge), "clique gauche/droit: desinner Tourner roue souris: effacer n = nouveau dessin\nechape = quitter");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 + 50, makecol(rouge), "Bleu: b Rouge: r Blanc = w Vert: v Beige: p Jaune: j Gris: g Orange: o Noir: n Marron: m chiffre = taille");
textprintf_centre(buffer, ecr, SCREEN_W / 2, SCREEN_H / 2 + 100, makecol(rouge), "Appuyer sur entrer pour continuer");
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
}
clear_to_color(buffer, makecol(blanc));
rouge;
while(!key[KEY_ESC])
{
if(mouse_b & 2)
rectfill(buffer, mouse_x, mouse_y, mouse_x + taille, mouse_y + taille, makecol(r, g, b));
else if(mouse_b & 1)
circlefill(buffer, mouse_x, mouse_y, taille, makecol(r, g, b));
else if(mouse_z & 1)
blanc;
else if (keypressed())
{
choix=readkey();
switch(choix >> 8)
{
case KEY_O:
orange;
break;
case KEY_G:
gris;
break;
case KEY_R:
rouge;
break;
case KEY_M:
marron;
break;
case KEY_P:
beige;
break;
case KEY_B:
bleu;
break;
case KEY_Z:
blanc;
break;
case KEY_V:
vert;
break;
case KEY_J:
jaune;
break;
case KEY_N:
clear_to_color(buffer, makecol(blanc));
break;
case KEY_S:
save_bitmap("dessin.pcx", buffer, NULL);
break;
case KEY_L:
clear_bitmap(buffer);
buffer = load_bitmap("dessin.pcx", NULL);
if(!buffer)
buffer = load_bitmap("dessin.tga", NULL);
else if(!buffer)
buffer = load_bitmap("dessin.bmp", NULL);
else if(!buffer)
buffer = load_bitmap("dessin.lbm", NULL);
else if(!buffer)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Erreur chargement image inexistante\nVerifier que le nom de l'image soit bien:\ndessin.pcx/bmp/lbm/tga\
\n%s", allegro_error);
return -1;
}
break;
case KEY_1_PAD:
taille = tres_petit;
break;
case KEY_2_PAD:
taille = petit;
break;
case KEY_3_PAD:
taille = moyen;
break;
case KEY_4_PAD:
taille = moyen_grand;
break;
case KEY_5_PAD:
taille = grand;
break;
case KEY_6_PAD:
taille = grand_moyen;
break;
case KEY_7_PAD:
taille = tres_grand;
break;
}
}
blit(souris, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
clear_bitmap(souris);
}
}
#endif // LOOP_C_INCLUDED