IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[FAQ] [Allegro] début de la faq allegro [En attente]


Sujet :

Contribuez

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut [FAQ] [Allegro] début de la faq allegro
    bon je tente de faire un bout de faq allegro pour combler le vide. désolé pour les éventuelles fautes de français .


    qu'est ce qu'Allegro ?

    Allegro (Allegro Low LEvel Game ROutines) est une librairie écrite en C regroupant tout un tas de routines multimedias de bas niveau.
    elle permet de gerer, entre autre:

    • Le mode graphique: fenetré ou plein écran
    • Le chargement et la sauvegarde d'images sous de nombreux formats
    • L'affichage 2d software avec des fonctions de blit (copie de bitmap) et de dessins de primitives (lignes, polygones, rectangles, spline, cercle ...).
    • Les tranformations de bitmap: modification de la taille, rotation etc ...
    • L'affichage 2d hardware via open GL avec l extension Open Layer
    • L'affichage 3d software
    • L'affichage 3d hardware via open GL avec l'extension ALLEGRO GL
    • L'audio
    • La gestion de fichiers "compactés" .dat
    • Les timers
    • Les entrées utilisateur ( clavier, souris, manette ...)
    • L'interface graphique via le GUI Allegro


    Pour terminer, Allegro est sous licence giftware, vous pouvez donc l'utiliser comme bon vous semble:

    http://alleg.sourceforge.net/license.fr.html



    pourquoi utiliser Allegro ?
    on preferera Allegro aux autres librairies (directX,SDL) car celle ci est facile à apprendre, la syntaxe se rapproche beaucoup des fonctions de la librairie standard c sans event ni rien.De plus Allegro est tres complète, pas besoin d'utiliser plusieurs librairies pour faire un jeu, allegro se charge de tout.
    En plus de sa facilité, Allegro est multiplateforme, il existe des portages pour presque tout les os : windows, dos, linux ,beOS ,macOS X ...

    Enfin, il existe de nombreux binding d'allegro: C#, python, lua ...

    Pour avoir un aperçu de ce qui est possible de faire avec allegro allez faire un tour sur www.allegro.cc .

    voici quelques projets developpé à l'aide d'Allegro:

    http://www.allegro.cc/depot/Meteor2/ meteor un jeu d'action.
    http://www.allegro.cc/depot/PurpleMartians/ purple martian un melange d'enigme et de jeu de plateforme
    http://www.allegro.cc/depot/IcyTower icytower un petit jeu d'adresse
    http://www.allegro.cc/depot/MythicBlades mythicblades un jeu de combat 3d commercial










    bon voila j'en ecrirai d autre cet aprem, j espere que cela correspond avec l esprit faq de developpez. com

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    Ou se procurer Allegro et comment l'installer (windows)?

    La derniere version stable d'Allegro est disponible ici : http://www.allegro.cc/files/

    cette page contient plusieurs choses:
    • des packages binaires pour les principaux compilateur C/C++ sous windows (facile a installer)
    • La source pour compiler la librairie sous differentes plateformes
    • La documentation tres fournie d'Allegro


    L'installation d'Allegro sous windows est très facile, voici ce que vous devez faire pour l'installer:

    • Aller sur http://www.allegro.cc/files/ dans la section binary et choisir le package pour son compilateur
    • Ouvrir le package
    • Ce dernier contient 3 dossier lib,include et bin : il faut copier le contenu de lib dans le répertoire library de votre compilateur, copier le contenu du dossier include dans le répertoire include de votre compilateur et enfin copier les dll contenues dans bin dans windows/system
    • Voila, allegro est prète à être utilisée

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    ou trouver des tutorials pour Allegro ?


    voici quelques tutorials pour allegro:

    (fr) http://iteme.free.fr/tutorials/Allegro.pdf très bon tutorial en francais sur les bases d'allegro idéal pour commencer. il traite de l'affichage en général (utilisation d'un buffer, double et triple buffering, fonction de blit, affichage de texte,de primitives), de la récupération des entrées utilisateur (clavier, souris)
    et des timers.

    (en)http://loomsoft.net/resources/alltut/alltut_index.htm traite des même choses que précedement avec en plus la gestion de bounding boxes pour la collision, la gestion de l'animation, l'utilisation des datafiles ...

    (en) http://www.reflectedgames.com/create.html tutorial sur la création d'un jeu type hack n slash avec Alegro, très intéressant

    (en)http://pixwiki.bafsoft.com/wiki/index.php/Main_Page ce site contient l'ensemble des magazines pixelate. ces magazines traitent d'Allegro mais aussi de tout ce qui est en rapport avec la création de jeu : écriture de moteur 2D tile, gestion de collision, moteurs physiques,bsp tree, etc...

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    ou trouver des librairie additionnelles pour Allegro ?

    la page dédiée aux librairies pour Allegro est ici: http://www.allegro.cc/resource/Libraries

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    bon maintenant j attaque la 2D je pense que les generalité sont a peu pres toutes passées en revue


    Comment initialisé un mode video ?

    Pour initialiser le mode graphique, on utilise les fonctions:

    int set_gfx_mode(int card, int w, int h, int v_w, int v_h);
    et set_color_depth(int col);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    set_color_depth(16);//on choisit le mode 16 bit les modes valides sont 8 16 24 32
     
    //on va maintenant initialiser le mode video avec la fonction set_gfx_mode
     
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0,0);
    /*
      les arguments de la fonction sont:
    1) le "mode video" a utiliseé il en existe plusieur, ici on utiliser  un mode video qui servira à creer une fenetre
    2) la taille en X du mode graphique ici 800
    3)la taille en Y du mode graphique ici 600
    4 et 5) la taille de l ecran virtuel, on ne l utilise pas donc 0,0
    */
    voici les different mode video que nous pouvons passer en parametre :
    GFX_AUTODETECT -> on laisse allegro trouver un driver correct
    GFX_AUTODETECT_FULLSCREEN -> on laisse allegro trouver un driver en mode plein écran
    GFX_AUTODETECT_WINDOWED-> on laisse allegro trouver un driver en mode fenetré.

    il exists plein d autres modes video differents selon l'os, pour de plus amples informations sur tout les modes video, se referer à la documentation allegro: section platform specifics

    voila l exemple de base maintenant, il se peut qu'il n'existe aucun driver qui accepte la resolution, il est donc conseillé de tester si le mode video a été initialisé, la fonction retourne 0 si le mode video est initialisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    set_color_depth(16);
    //on va maintenant initialiser le mode video avec la fonction set_gfx_mode
     
    if(set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0,0)!=0)return 0;

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    Comment créer ou charger les different types bitmap ?

    Une fois le mode video initialisé nous pouvons creer et charger des bitmaps.
    Il est possible de creer plusieurs type de bitmap avec allegro, nous allons voir ces differents types et comment les utiliser.

    il existe 3 types de bitmap dans Allegro:

    1) les bitmaps "normaux" stockés dans la ram: ces bitmap permettent des blit assez lents, mais la vitesse de blit est assuré sur tout les pc.ce sont les bitmaps les plus rapide a transformer (rotation transparence etc)

    2) les bitmap "system" stockés dans la ram:ces bitmaps sont un peu particuliés, bien que stocké dans la ram, ils autorisent des blits plus rapides vers la carte vidéo que les bitmap simples.ils sont aussi rapide à transformer que les bitmaps normaux.le seul bémol est que la vitesse de blit n'est pas assuré sur tout les pc, il faut tester le flag GFX_HW_SYS_TO_VRAM_BLIT etGFX_HW_SYS_TO_VRAM_BLIT_MASKED pour etre sur que l'utilisation de bitmap system ne fasse pas baisser les performances du programme.

    3) les bitmaps "video" stocké dans la memoire video: la creation de ces bitmap est limité par la taille de la memoire vidéo. les blits bitmaps vidéos vers bitmap vidéo sont extrement rapide. La vitesse des blit video depend de la carte graphique, si la carte ne supporte pas l'accelération des blit video, les blits seront tres lents. c'est pour cela qu'il faut tester les flags GFX_HW_VRAM_BLIT et GFX_HW_VRAM_BLIT_MASKED pour etre sur que l'utilisation de ce type de bitmap ne fera pas baisser les performances du programme. Enfin, toute tranformation sur les bitmaps vidéos est à proscrire, car l'accès aux bitmaps de la carte video est tres lent

    ATTENTION: lorsque l'on créer un video bitmap,le pointeur screen n'est plus utilisable. ( Warning: video memory bitmaps are usually allocated from the same space as the screen bitmap, so they may overlap with it; it is therefore not a good idea to use the global screen at the same time as any surfaces returned by this function.)


    création de bitmap "normal"

    on utilise pour cela la fonction :
    BITMAP *create_bitmap(int width, int height);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BITMAP *bitmapstandard=create_bitmap(100,200);
    //les deux arguments sont: la taille en X du bitmap à créer la taille en Y du bitmap a créer.La fonction retourne un pointeur vers le bitmap crée en cas de succès sinon elle retourne NULL
    création de bitmap system
    on utilise pour cela la fonction :
    BITMAP *create_system_bitmap(int width, int height);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BITMAP *bitmapsystem=create_system_bitmap(100,200);
    //les deux arguments sont: la taille en X du bitmap à créer la taille en Y du bitmap a créer.La fonction retourne un pointeur vers le bitmap crée en cas de succès sinon elle retourne NULL
    création de bitmap video
    on utilise pour cela la fonction :
    BITMAP *create_video_bitmap(int width, int height);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BITMAP *bitmapvideo=create_system_bitmap(100,200);
    //les deux arguments sont: la taille en X du bitmap à créer la taille en Y du bitmap à créer.La fonction retourne un pointeur vers le bitmap crée en cas de succès sinon elle retourne NULL


    chargement de bitmap

    ATTENTION: pour charger des images 16 24 32 bit,dans une application ou le nombre de couleur est 256 (8 bit) il generer des palettes.

    le chargement de bitmap se fait avec la fonction :

    BITMAP *load_bitmap(const char *filename, RGB *pal);
    cette fonction créer un bitmap en memoire a partir d'un fichier.
    pour une image 16 24 32 bit l'argument palette doit etre NULL, pour une image 8 bit on doit passer une structure PALETTE pour récupérer la palette de l'image.


    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BITMAP *monimage=load_bitmap("image.tga",NULL);
    //on charge une image 16,24,ou 32 bits.
    // cette fonction permet de charger des fichier bmp, pcx, tga et lbm
    tout les bitmap chargé sont des bitmaps "normaux" pour les tranferer dans la memoire video il faut creer soit meme un bitmap video puis blitter le bitmap chargé dans le bitmap video, enfin il faut supprimer le bitmap chargé.



    --------------------------------------------------------------------------
    bon j ai eu un petit peu de mal pour ecrire ca, si quelqu un utilise allegro pour chargé des bitmap != 8 bit en mode 8 bit , pourrait t il ecrire un post sur le chargement des bitmap et l optimisation de palette ?

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Très bon début, merci

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    Ba de rien ca me fait plaisir de voir qu'il y a une communauté francophone Allegro meme petite alosr j apporte ma contribution pour faire connaitre cette super lib. c'est bizarre quand meme que plus de personne dans le monde francophone utilise sdl :s allegro est vachement plus complet et facile.

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    bon aller je continu toujours sur la 2d, cette fois je m'attaque aux fonctions de blit.

    comment blitter un bitmap ?

    Un blit est une copie d'un bitmap rectangulaire sur un autre bitmap.
    il est utilisé pour par exemple afficher un personnage ou des tiles (petites briques de decors à l'ecran)

    Passons en revue les fonctions mise à notre disposition par Allegro pour effectuer des blits:

    1) void blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

    Cette fonction copie copie une portion de bitmap rectangulaire d'un bitmap source dans un autre bitmap.Voyons les arguments a passer à cette fonction:
    • source -> c'est le bitmap dans lequel on va "prelever" le morceau qui nous interresse
    • dest -> c'est le bitmap dans lequel on va copier le morceau de bitmap.
    • source_x et source_y -> ce sont les coordonnées à partir desquelles on va commencer a prelever le morceau de bitmap
    • dest_x, dest_y-> ce sont les coordonnées à partir desquelles on va coller le morceau de bitmap
    • width -> c'est la taille en X du morceau qui va etre copié
    • height-> c'est la taille en Y du morceau qui va etre copié


    si ce n'est pas tres claire voici une image pour illustrer le blit


    voici maintenant un petit exemple pour illustrer le blit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    //on initialise allegro  le mode video ->16 bit ect...
     
    BITMAP white=create_bitmap(100,100);//on creer un petit bitmap en memoire
    BITMAP buffer=create_bitmap(SCREEN_W,SCREEN_H);on cree un bitmap de la taille de l'ecran
    //SCREEN_W et SCREEN_H sont 2 variable allegro qui contienne la taille de l'écran 
     
    void clear_to_color(white, makecol(255,255,255));//on repaint tout le bitmap en blanc 
    //makecol est un macro qui permet de faire une couleur  a partir des composante rgb de la couleur
    void clear_to_color(buffer,0);//on repaint en noir
     
    //on va maintenant afficher une zone de white dans le bitmap buffer
     
    blit(white,buffer,0,0,30,30,20,30);
    //on affiche la portion de white situé en X=0 Y=0 de longueur 20 de hauteur 30 dans buffer.
     
    //pour voir le resultat il faut afficher buffer a l'ecran.pour cela on va utilisé un blit
     
    blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);//on affiche buffer a l'écran
    rest(1000);//temp d'attente de 1 seconde.
     
    destroy_bitmap(white);// on libere la memoire utilisé par les bitmap 
    destroy_bitmap(buffer);
     
    // ici on desinitialise la lib ect
    1) void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);

    Copier des zones rectangulaires d'un bitmap à l'autre c'est bien beau, mais le problemes c'est que les sprites de personnages, de decors (par exemple mario ou un palmier) sont rarement rectangulaires.
    pour pouvoir afficher juste une portion de la zone rectangulaire selectionner, nous allons utiliser une fonction de blit qui test la couleur de chaque pixel et qui ne recopie que les pixel dont la couleur est différente a la couleur de masque.

    les parametres de la fonciton masked_blit sont identiques à ceux de la fonction blit:
    • source -> c'est le bitmap dans lequel on va "prelever" le morceau qui nous interresse
    • dest -> c'est le bitmap dans lequel on va copier le morceau de bitmap.
    • source_x et source_y -> ce sont les coordonnées à partir desquelles on va commencer a prelever le morceau de bitmap
    • dest_x, dest_y-> ce sont les coordonnées à partir desquelles on va coller le morceau de bitmap
    • width -> c'est la taille en X du morceau qui va etre copié
    • height-> c'est la taille en Y du morceau qui va etre copié




    A TERMINER -> masked blit + strech blit + draw sprite

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    comment désallouer un BITMAP ?

    C'est très simple, pour désallouer un bitmap allegro on utilise la fonction:
    void destroy_bitmap(BITMAP *bitmap);

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //initialisation d'allegro
    BITMAP *monbitmap=create_bitmap(100,100);
     
    destroy_bitmap(monbitmap);
     
    //desinitialisation d allegro

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    aller je change un peu de registre avec l'affichage de texte. toute aide est la bienvenue .

    Comment afficher du Texte ?

    Allegro dispose de deux grosses fonctions principales pour afficher le texte:

    void textout_ex(BITMAP *bmp, const FONT *f, const char *s, int x, int y, int color, int bg);
    qui permet d'afficher une chaine de caractères sans formatage.

    void textprintf_ex(BITMAP *bmp, const FONT *f, int x, int y, int color, int bg, const char *fmt, ...);

    qui permet d'afficher une chaine de caratèere avec formatage (ceux qui utilisent printf ne seront pas depaysés)



    Examinons tout d'abord la fonction textout_ex et ses arguments:
    • bmp est le bitmap sur laquel la chaine va etre ecrite
    • f est la font utilisé pour ecrire le message; allegro fournit une fonte standard appelé font
    • s est la chaine de caractères a afficher
    • x et y sont les coordonnées ou va être placé la chaine de caractères
    • color est la couleur du texte, pour definir une couleur, il faut utiliser la macro makecol(int r,int g,int b)
    • bg est la couleur de fond de votre texte, on peut mettre une couleur de fond par exemple avec makecol ou mettre un fond transparent en assignant la valeur -1 à ce paramètre


    Note: si vous utilisez une version archaique d'allegro (par exemple la 4.0.X) ou même si vous lisez des tutoriaux Allegro un peu ancien, il se peut que vous tombiez sur le fonction textout au lieu de textout_ex, pas de panique textout est toujours presente dans les nouvelles versions d'allegro meme si elle est "deprecated".la seule difference entre textout et textout_ex est l'absence d'argument bg

    voici un exemple d'utilisation de textout_ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    set_uformat(U_ASCII);// on initialise allegro en mode extended ascii pour permettre le gestion des accents
    //on initialise allegro ....
     
    char chaine[]="Ceci est un test d'affichage de text: é è à les accents sont aussi pris en compte";
     
    textout_ex(screen,font,chaine,10,10,makecol(255,255,255),-1);
    //on affiche notre chaine en x=10 y=10 en blanc avec un fond transparent
     
    rest(5000);//on fait un pause de 5 seconde pour voir le resultat
     
    //on desinitialise allegro

    Examinons maintenant textprintf_ex et ses arguments:
    • bmp est le bitmap sur laquel la chaine va etre ecrite
    • f est la font utilisé pour ecrire le message; allegro fournit une fonte standard appelé font
    • x et y sont les coordonnées ou va être placé la chaine de caractères
    • color est la couleur du texte, pour definir une couleur, il faut utiliser la macro makecol(int r,int g,int b)
    • bg est la couleur de fond de votre texte, on peut mettre une couleur de fond par exemple avec makecol ou mettre un fond transparent en assignant la valeur -1 à ce paramètre
    • s est la chaine de caractères a afficher
    • ... sont les arguments additionels en cas de formatage de la chaine


    la fonction textprintf_ex fontionne de la meme maniere que printf pour ce qui est du formatage de chaine, si vous voulez placer un entier dans la chaine il suffit de placer %d dans le chaine puis votre entier dans les arguments additionels.


    Note: si vous utilisez une version archaique d'allegro (par exemple la 4.0.X) ou même si vous lisez des tutoriaux Allegro un peu ancien, il se peut que vous tombiez sur le fonction textprintf au lieu de textprintf_ex, pas de panique textout est toujours presente dans les nouvelles versions d'allegro meme si elle est "deprecated".la seule différence entre textprintf et textprintf_ex est l'absence d'argument bg


    voici un exemple d'utilisation de textout_ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    set_uformat(U_ASCII);// on initialise allegro en mode extended ascii pour permettre le gestion des accents
    //on initialise allegro ....
    int var=15;
    float nbvirg=3.14;
    char c='c'
     
     
    textprintf_ex(screen,font,10,10,makecol(255,255,255),-1," on va tester ici le formatage.On affiche un entier %d ,un flottant: %f, un char: %c",var,nbvirg,c  );
    /*on affiche notre chaine en x=10 y=10 en blanc avec un fond transparent
    pour le formatage, on place les arguments additionel dans l'ordre de leur apparition dans la chaine exactement comme pour printf
    */
     
    rest(5000);//on fait un pause de 5 seconde pour voir le resultat
     
    //on desinitialise allegro

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    Comment afficher les accents avec les fonctions texte Allegro ?


    Pour pouvoir afficher les accents, on utilise la fonction
    void set_uformat(int type); avec le parametre U_ASCII lors de l'initialisation d'allegro.


    petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    allegro_init();
    set_uformat(U_ASCII);//extended ascii pour les accents :op
    set_color_depth(16) ;
     
    	if (set_gfx_mode(GFX_AUTODETECT_WINDOWED  ,600,400, 0, 0) != 0) {
     
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); 
    allegro_message("Impossible d’initialiser le mode vidéo !\n%s\n", allegro_error);
    return 1; 
    }
     
     
    install_mouse();
    install_keyboard();

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    je reviens à la 2d avec la sauvegarde de bitmap -> capture d'écran ect

    Comment sauvegarder un Bitmap ?

    La sauvegarde de Bitmap peut etre très utile pour par exemple faire une option de capture d'écran, faire un logiciel de dessin ou meme enregistrer le resultat d'un traçage de courbe.

    Allegro met a notre disposition une fonction tres simple pour sauvegarder les bitmap stocker dans la memoire sur le disque dur:

    int save_bitmap(const char *filename, BITMAP *bmp, const RGB *pal);

    examinons les parametres:
    • filename est le chemin sur le disque du fichier image + le nom exemple "C:\\test.bmp"
    • bmp est le bitmap a sauver
    • pal est la palette du bitmap si ce dernier est un bitmap 256 couleur.


    On peut sauver les bitmap en BMP, TGA et PCX

    voici un petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //on initialise allegro mode 16 bit  clavier souris etc...
     
    BITMAP *test=create_bitmap(200,200);//on creer un bitmap en memoire 
     
    clear_to_color(test, 0);//on repeint le bitmap en noir
     
    rectfill( test, 0, 0,50, 50,makecol(255,255,255));// on affiche un rectangle blanc dans le bitmap test
     
    save_bitmap("c:/test.bmp", test, NULL);// notre bitmap est en en truecolor -> pas besoin de palette
     
    destroy_bitmap(test);// on desalloue le bitmap
     
     
    //on desinitialise allegro

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    Comment dessiner des primitives ?


    On peut dessiner bcp de primitives avec allegro: point, rectangle, ligne, cercle, polygone, spline
    Nous allons voir comment les dessiner:


    1) dessiner un pixel

    Allegro fournit la fonction void putpixel(BITMAP *bmp, int x, int y, int color); pour dessiner des pixels sur un bitmap.

    voyons les arguments de la fonctions:
    • bmp est le bitmap dans lequel le pixel va etre dessiné
    • x et y sont les coordonnées du pixel a dessiner
    • color est la couleur du pixel a dessiner : on peut utiliser makecol(int r,int g,int b); pour specifier la couleur du pixel


    il faut noter aussi qu'il existe des fonctions putpixel optimisées pour les differents mode graphiques :
    void _putpixel(BITMAP *bmp, int x, int y, int color);
    ecrite en assembleur et
    void _putpixel15(BITMAP *bmp, int x, int y, int color);
    void _putpixel16(BITMAP *bmp, int x, int y, int color);
    void _putpixel24(BITMAP *bmp, int x, int y, int color);
    void _putpixel32(BITMAP *bmp, int x, int y, int color);

    écrites elles aussi en assembleur et optimisé pour les mode graphiques mentioné dans le nom de la fonction (15 16 24 32 bits).

    Attention tout de meme, contrairement a putpixel, l'utilisation des fonctions optimisée en dehors du bitmap fera planter le programme;
    A continuer -> rectfill line spline polygone circle

  15. #15
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Salut
    Pourrais tu faire un sommaire (même sommaire ) qui indiquerait un peu la place des Q\R ensuite je tacherais de passer ça au gabarit dvp à moins que laurent s'en charge...

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Gnux
    Salut
    Pourrais tu faire un sommaire (même sommaire ) qui indiquerait un peu la place des Q\R ensuite je tacherais de passer ça au gabarit dvp à moins que laurent s'en charge...
    Je comptais m'en charger très prochainement, pas de souci, mais merci de la proposition

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    J'ai commencé à mettre en page tout ça, et j'ai une petite question par rapport au site que tu donnes dans les tutoriels :
    http://pixwiki.bafsoft.com/wiki/index.php/Main_Page

    Je ne vois pas grand chose dessus, j'ai loupé quelque chose ?

  18. #18
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Tout cela me rappelle qu'il faut absolument que je continue ma série d'articles ! C'est la folie, j'arrète pas de puis la fin d'année scolaire, ils nous font directement enchainer avec le stage

  19. #19
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Par défaut
    pour le wiki de pixelate va voir dans cette rubrique: Vintage Pixelate Issues

    sinon il y a aussi le lien a tout les magasine pixelate dans la rubrique all page notament avec ce lien : http://pixwiki.bafsoft.com/mags

  20. #20
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    J'ai continué la mise en page de la FAQ Allegro.

    Plusieurs remarques :

    - Il ne manquerait pas un petit mot concernant allegro_init ? Elle n'est pas mentionnée une seule fois, pourtant c'est indispensable non ? Pareil pour la fonction qui libère Allegro (me rappelle plus le nom).

    - La question sur le blit de bitmaps est assez grosse, il faudrait la partitionner en plusieurs. Une idée : une Q/R générale décrivant les différents types de blit, puis une Q/R détaillée pour chaque fonction.

    - J'attends que tu finisses les questions "to be continued" avant de les intégrer

    - Et puis la suite bien entendu

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/04/2009, 11h31
  2. [Algorithmes] FAQ : les Q/R à intégrer dans la FAQ
    Par Community Management dans le forum Contribuez
    Réponses: 0
    Dernier message: 07/08/2006, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo