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

Allegro Discussion :

Probleme de sprite avec allegro


Sujet :

Allegro

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Probleme de sprite avec allegro
    Salut tout le monde

    J'ai un gros probleme sur allegro. En fait voila j'ai chargé une image bitmap et sprite que je deplace grace a mes touches directionnels. Mais voila quand je deplace mon sprite il dessine sur sur le bitmap de fond... Donc petit a petit mon image disparait de plus en plus et est remplacée entierement par la courleur de mon sprite a la fin. Commet faire pour que mon sprite se mouve sans deteindre sur mon image de fond. Voila mon code source:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include<allegro.h>
    #define L 700
    #define H 550
     
     
    int main(void){
        float x=0;
        float y=0;
        int i=0;
     
        BITMAP *buffer;
        BITMAP *image;
        BITMAP *sprite;
     
        allegro_init();
        install_keyboard();
        set_color_depth(24);
        set_gfx_mode(GFX_AUTODETECT,L,H,0,0);
        buffer=create_bitmap(L,H);
        image=load_bitmap("FMA.bmp",0);
        sprite=load_bitmap("ig.bmp",0);
     
        while(!key[KEY_ESC])
        {
     
         draw_sprite(image,sprite,x,y);
         blit(image,screen,0,0,0,0,L,H);
     
         if(key[KEY_UP])
         y-=1; 
     
         if(key[KEY_DOWN])
         y+=1 ;
     
     
         if(key[KEY_LEFT])
         x-=1 ;
     
     
         if(key[KEY_RIGHT])
         x+=1;
        }
         clear_bitmap(image);
         destroy_bitmap(sprite);
         readkey();
        return 0;
    }END_OF_MAIN();
    Voila merci j'attend avec impatience vos reponses.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ce n'est pas un problème de C à proprement dit. Un forum Developpement de Jeu existe pour ce genre de questions...

    Pour te répondre, le problème c'est que tu blit ton sprite directement sur ton image de fond. Il est donc logique que tu la perdes peu à peu.

    Ce qu'il faut faire, c'est changer ta façon de faire:

    Tu blit sur l'écran l'image de fond
    Tu blit sur l'écran le sprite qui t'intéresse à sa position
    Sans passer par ta fonction draw_sprite...
    Une autre solution et de passer par ton tableau buffer (qui ne semble servir à rien...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    copier_fond_sur_buffer(buffer,image);
    draw_sprite(buffer,sprite,x,y);
    blit(image,screen,0,0,0,0,L,H);
    Jc

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Probleme resolut
    Salut tout le monde.

    Tout d'abord merci pour ta reponse JC, et desolé pour mettre tropmpé de forum lol. Oui voila j'ai trouvé la solution. En fait j'ai chargé une autre image que j'ai colé sur l'ecran, et sur cette derniére j'ai chargé l'image finale...Enfin j'ai chargé mon sprite sur l'image de fond. Voila je ne sais pas si je me suis bien exprimé ou si c'est la meilleur solution mais c'est a marché... Tes conseilles m'ont etaient precieux donc merci encore une fois. Meme si je ne suis pas sur le bon forum je souhaite quand meme fournir mon code en cas de meme difficulté retrouvée.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    #include<allegro.h>
    #define L 700
    #define H 550
     
     
    int main(void){
        float x=0;
        float y=0;
        int i=0;
     
        BITMAP *buffer;
        BITMAP *image;
        BITMAP *image2;
        BITMAP *sprite;
     
        allegro_init();
        install_keyboard();
        set_color_depth(24);
        set_gfx_mode(GFX_AUTODETECT,L,H,0,0);
        buffer=create_bitmap(L,H);
        image=load_bitmap("FMA.bmp",0);
        image2=load_bitmap("blanc.bmp",0);
        sprite=load_bitmap("ig.bmp",0);
     
        while(!key[KEY_ESC])
        {
     
         draw_sprite(image2,sprite,x,y);
         blit(image2,screen,0,0,0,0,L,H);
         blit(image,image2,0,0,0,0,L,H);
     
         if(key[KEY_UP]){
         y-=1; 
     
         }
         if(key[KEY_DOWN]){
         y+=1 ;}
     
     
         if(key[KEY_LEFT]){
         x-=1 ;}
     
     
         if(key[KEY_RIGHT]){
         x+=1;}
        }
     
         destroy_bitmap(sprite);
         readkey();
        return 0;
    }END_OF_MAIN();
    Voila a ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'échelle de sprite avec la souris
    Par Steff2 dans le forum Débuter
    Réponses: 9
    Dernier message: 26/07/2011, 06h02
  2. Problème d'affichage d'un sprite avec SDL
    Par youp_db dans le forum SDL
    Réponses: 1
    Dernier message: 11/02/2006, 18h08
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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