Accueil > Forum > > > > Problème avec Allegro
Problème avec Allegro
dimanche 27 novembre 2005 à 19:53:07 |
Problème avec Allegro

tikof
|
Bonjour à tous,
Voila j'ai vu une source sur le site qui montrait comment afficher un
rond et pouvoir le bouger sur un fond à l'écran avec allegro en c++.
je me suis permis de le modifier à ma façon pour afficher un personnage et non pas un rond.
seul problème, c'est que mon personnage clignote sans cesse.
voici mon source:
#include <allegro.h>
void main()
{
BITMAP *image; // pour charger un fond noir de taille 640 * 480
BITMAP *buffer;// buffer indispensable pour afficher l'image a l'ecran grace a la fonction blit
BITMAP *bufferperso;
BITMAP *perso; //le perso qu'on déplacera à l'écran
PALETTE palette;// la palette on s'en servira lors du chargement de l'image
PALETTE persopal;
int x=320; // position du perso en x initial
int y=240; // position du perso en y initial
install_allegro(SYSTEM_AUTODETECT,&errno,atexit); // fonction d'initialisation d'allegro
install_keyboard(); //initialisation du clavier
set_color_depth(16); // mode 16 bits(plein ecran)
set_gfx_mode(GFX_AUTODETECT,640,480,0,0); // indispensable pour le graphisme
buffer=create_bitmap(640,480); // buffer de taille 640 * 480
bufferperso=create_bitmap(40,40);
image=load_bitmap("noir.bmp",palette); // chargement de l'image .BMP
perso=load_bitmap("perso.bmp",persopal);
blit(perso,bufferperso,0,0,0,0,perso->w,perso->h);
blit(image,buffer,0,0,0,0,image->w,image->h); // Affichage de l'image sur le buffer
blit(buffer,screen,0,0,0,0,640,480); // le buffer affichera ceci sur l'ecran
while(!key[KEY_ESC]) // Tant que l'on a pas pressé la touche ESC (echap)
{
textout(image,font,"Deplacement
d'un Rond avec Allegro !",1,1,makecol(100,100,12)); //la fonction
makecol est expliquée plus bas
blit(bufferperso,screen,0,0,x,y,40,40);
if(key[KEY_UP]) // si on appuie sur la touche du haut
{
clear_bitmap(image); // efface l'ecran
y--; // on decrement y
blit(bufferperso,screen,0,0,x,y,40,40);
}
else if(key[KEY_DOWN]) // LA meme chose ...
{
clear_bitmap(image);
y++;
blit(bufferperso,screen,0,0,x,y,40,40);
}
else if(key[KEY_LEFT])
{
clear_bitmap(image);
x--;
blit(bufferperso,screen,0,0,x,y,40,40);
}
else if(key[KEY_RIGHT])
{
clear_bitmap(image);
x++;
blit(bufferperso,screen,0,0,x,y,40,40);
}
}
}
END_OF_MAIN(); // Allegro exige que l'on mette ça a la fin du code ...
Je vous remercie d'avance.  Arthur
|
|
lundi 28 novembre 2005 à 08:43:29 |
Re : Problème avec Allegro

xboxut
|
Réponse acceptée !
pour que ton personnage ne clignote plus reporte toi au chapitre gestion des buffer du tutorial que tu est en train de lire :D . j ai reconnu le tuto en fr et en pdf pour allegro ac le rond qui bouge.
j vais kan meme te repondre.
Quand tu dessine directement sur ton ecran (le bitmap screen )cela creer des artefact graphique .
Pour resoudre ce probleme, utilise un buffer.C'est un bitmap en memoire de la taille de l écran qui te servira a tout dessiner.ensuite , en fin de boucle tu n aura plus qu a afficher ton buffer sur l ecran. cela fera ainsi disparaitre tes effet de flickering.
en plus si j ai bien vu tu intialise un buffer mais tu ne l utilise pas:
buffer=create_bitmap(640,480); // buffer de taille 640 * 480
dans tes blit remplace ta destination par buffer: exemple :
blit(bufferperso,buffer,0,0,x,y,40,40);
puis en fin de boucle blit ton buffer sur l ecran
blit(buffer,screen,0,0,0,0,40,SCREEN_W,SCREEN_H);
voila bonne chance pour ton apprentissage d allegro ;) si tu a d autres questions n'hesite pas
|
|
lundi 28 novembre 2005 à 13:33:04 |
Re : Problème avec Allegro

tikof
|
Réponse acceptée !
tout dabord merci d'avoir répondu aussi vite, mais j'ai un autre
problème, avec le code que j'ai mis ci dessus, lorsque je compile pour
tester mon prog, le texte qui devrait s'afficher "
textout(image,font,"Deplacement d'un Rond avec Allegro
!",1,1,makecol(100,100,12));" ne s'affiche pas.
j'avais une autre question, est-ce que la constante "screen" est défini par la lib et désigne l'écran?
d'autre part (désolé pour toutes ces questions) je n'ai pas
compris pourquoi tu dis que je déssine directement sur l'écran, mon
bitmap "perso", je le stock dans un buffer , "bufferperso" (cf :
"blit(perso,bufferperso,0,0,0,0,perso->w,perso->h); " )
donc voila, et encore une fois merci d'avoir répondu.
Arthur
|
|
lundi 28 novembre 2005 à 13:41:40 |
Re : Problème avec Allegro

tikof
|
Pardon, j'ai aussi oublié de te demander pourquoi je devrais stocker un buffer "bufferperso" dans un autre buffer "buffer" cf: "blit(bufferperso,buffer,0,0,x,y,40,40);"
|
|
lundi 28 novembre 2005 à 16:52:21 |
Re : Problème avec Allegro

xboxut
|
est-ce que la constante "screen" est défini par la lib et désigne l'écran?
oui.
je n'ai pas compris pourquoi tu dis que je déssine directement sur l'écran, mon bitmap "perso", je le stock dans un buffer.
oui tu le stocke dans un bitmap de 60 40 je crois.
mais le truc c'est que ton stockage de ton bitmap dans un autre bitmap ne sert a rien.
kan tu fait load bitmap ,allegro creer un bitmap en memoire et copie le bitmap du fichier vers ta memoire.
le truc pour eviter les effets de scintillement c de creer un buffer de taille de l ecran ou tu ecrira a chaque tour de boucle tout ce que tu doit afficher a l'écran, apres tu affiche ton buffer.
concernant ton message qui n est pas afficher c'est normal, tu affiche ton message dans image regarde:
textout(image,font,"Deplacement d'un Rond avec Allegro !",1,1,makecol(100,100,12));
pour le voir il faudrai l afficher dans ton buffer d'ecran
pour le bufferperso que tu stocke dans buffer, tu sotcke pas bufferperso dans perso ,mais tu le dessine dedan comme si tu le dessinait a l ecran en fait.
je vais voir si j ai pas un tuto que j avai fait en allegro pour mieux t expliquer
|
|
lundi 28 novembre 2005 à 17:01:30 |
Re : Problème avec Allegro

xboxut
|
/************************************************
****************tutorial allegro ****************
************************************************/
#include "allegro.h"//inclusion de la librairie
BITMAP *buffer;//un pointeur de type bitmap qui servira a créé une surface sur laquelle dessiner
BITMAP *image;
int main()//debut de notre fonction main
{
allegro_init();//installation d allegro
set_color_depth(16) ;//chois du nombre de couleur
set_gfx_mode(GFX_AUTODETECT_WINDOWED , 640, 480, 0, 0);//creation de l ecran ou de la fenetre allegro
//le premier parametre specifie si c'est une fenetre que l on doit cree ou un mode plein ecran
//GFX_AUTODETECT_WINDOWED pour le mode fenetre
//GFX_AUTODETECT_FULLSCREEN pour le mode plein ecran
//voila notre fenetre est crée.
install_mouse();//on installe la souris
install_keyboard();//on install le clavier
// ca y est allegro est installer notre fenetre est prete a etre utilisée utilisons la
/* pour l affichage nous allons ecrire dans un bitmap en memoire puis l afficher a l ecran, cette methode apellé le buffering permet
de ne pas avoir d artefact graphique a l écran*/
image=load_bitmap("image.bmp",NULL);//on charge en memoire une image que l on dessinera...
//pour creer un bitmap en memoire on utilise la fonction create_bitmap
//on l utilise ainsi : pointeurbitmap=create_bitmap(x,y);
buffer=create_bitmap(640,480);
clear_bitmap(buffer);//on nettoie notre bitmap o cas ou :p
//voila notre bitmap est crée en memoire il ne nous reste plus qu a ecrire dessus puis a l afficher a l ecran.
//pour cela nous allon cree une boucle
while(!key[KEY_ESC])//tant que escape n est pas apuyé
{
//rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
rectfill(buffer,0,0,100,100,makecol(255,255,255));
/*cette fonction permet de dessiner un rectangle en x1y1 x2 y2, makecol est une fonction
qui utilise 3 valeur RGB en parametre pour cree une couleur
*/
blit(image,buffer,0,0,100,100,image->w,image->h);
/*le blit est une copie d'un bitmap vers un autre , ici nous allons desssiner le bitmap image vers le buffer.
en position x=100 y=100. Au lieu d'afficher le bitmap directement sur l'ecran ,ce qui provoquerai des bugs graphiques,
nous allons afficher les bitmap sur un buffer qui sera a la fin de la boucle copier d'un bloc sur l'écran.Cela aura pour effet d'
eviter les effets de flickering ("sintillement de l'écran")
*/
//voyons maintenant le test sur clavier:
if(key[KEY_SPACE])
{
textout(buffer, font, "test", 0, 400,makecol(100,100,100));// on ecrit dans buffer la prase test
//textout(BITMAP *bmp, const FONT *f, const char *s, int x, y, int color);
//ceci est une fonction pour ecrire du texte a l écran.
}
//il ne nous reste plus qu a afficher le bitmap que l on a dessiner a l écran pour cela
//on utilise une fonction appeler blit qui copie des morceau de bitmap
//blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
blit(buffer, screen, 0, 0, 0, 0, 640, 480);//on affiche a l'ecran le buffer dans lequel on a dessiné
clear_bitmap(buffer);//on vide le buffer pour redesssiner dessus
}//fin de la boucle
allegro_exit();//on desintalle allegro et tout le bordel
return 0;
}
END_OF_MAIN();//fonction magique :p
|
|
mardi 29 novembre 2005 à 13:54:42 |
Re : Problème avec Allegro

xboxut
|
voila un bon tuto pour allegro : http://iteme.free.fr/
tu devrai tout comprendre avec ca ;) bonne chance si tu a d otre questions n hesite pas
|
|
Cette discussion est classée dans : image, perso, key, bitmap, blit
Répondre à ce message
Sujets en rapport avec ce message
Petit Bugg [ par ToToL ]
Tout d'abord voici mon code : #include int main() { install_allegro(SYSTEM_AUTODETECT, &errno, atexit);set_color_depth(16);set_gfx_mode(GFX_AUTODETECT
Charger un BMP avec une OpenFileDialog et l'afficher dans un pictureBox . [ par Dragoon ]
Bonjour à tous,Je ne suis pas un spécialiste du C++ et des MFC et je souhaiterais comprendre ce qui ne va pas dans mon programme.Je voudrais que celui
Déplacer Bitmap à la souris [ par GoldenEye ]
Bonjour, Je souhaiterais afficher une (grande) image bmp dans une fenêtre de taille fixe. A chaque fois que l'utilisateur presse le bouton gauche, le
need help_API - debutant. [ par JimyRyan ]
j'ai cree un progamme qui affiche une image (stoquee dans un fichier .bmp), et une phrase (lu a partir d'un fichier TXT), j'ai deux problemes : une fo
image bitmap et graphique ss visual c++ [ par pipic ]
Slt tt le monde,G 2 petites questions:1) Comment insérer une image ss visual C++??G créeé ma ressource et je l'ai chargé à partir de la ft° LoadBitmap
dialogbox et bitmap [ par supergrey ]
Bonjour, je fais actuellement un client IRC et je voudrais qu'un image s'affiche dans ma boite de dialogue principal lorsque la connexion est etablie.
longueur et largeur d'une image BITMAP. [ par Adeon ]
Salut!QQ peut il me dire la fonction en API qui donne la longueur et la largeur d'une image BITMAP. Adeon
Conversion bitmap 8 bits -> 24 bits [ par lma ]
Je suis à la recherche d'un programme permettant de convertir une image bitmap 8 bits en image bitmap 24 bitsQuelqu'un peut il m'aider ?
Comment récuperer la luminosité d'un pixel d'une image bitmap? [ par chmod777 ]
Je cherche a recuperer la luminosité d'un pixel (n'importe lequel) d'une image bitmap, cela ne doit pas etre sorcier mais j'avoue que là, j'ai du mal:
Découper puis affichier un bitmap [ par Vortex99011 ]
Bonjour,depuis quelques jours de recherches désespérées, je viens vous demander ici un grand secours. Je recherche une manière quelconque pour affiche
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|