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 :

Fusion de codes allegro


Sujet :

Allegro

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Fusion de codes allegro
    Bonjour,

    J'ai deux codes qui chacun de leur côté fonctionnent bien, j'essaie de les fusionner, et évidement plantage, je compile bien , il commence à s'exécuter mais ferme avec nomduprocess a cessé de fonctionner .... pas de access violation etc..

    le premier code utilise la lib allegro pour générer un starfield , l'autre un scroll text ( oui je sais on est plus en 1992 !! ) avec allegro aussi,

    j'ai a peu près réussi à localiser ce qui me génère le plantage, ce serait la fonction Draw_Sprite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y);
    si quelqu'un peut m'aider, je peux faire passer les projets DEVC++ par mail , le C++ n'est pas mon premier langage ...

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    tu pourrais aussi -- et surtout -- commencer par nous montrer toute fonction qui contient cette fameuse ligne de code, en la plaçant entre les balises [ CODE ]et [ /CODE ] qui seront ajoutées en appuyant sur le bouton # qui se trouve en en haut du formulaire de réponse. Cela nous aidera beaucoup plus que le fait d'envoyer les fichiers par mail (et permettra à plus de monde de te proposer une réponse)

    Par contre, le fait que tu utilises dev-C++ ne changera sans doute pas grand chose (du moins, si tu as pris la dernière version en date et non une version vieille de près de cinq ans )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    En effet ce sera plus simple, ma fonction main :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    int main(int argc, char *argv[]) {
     
        int framecount;
        framecount=0;
     
        allegro_init();        
    	install_keyboard();    
     
        LOCK_VARIABLE(speed_counter);
        LOCK_FUNCTION(increment_speed_counter);
        install_int_ex(increment_speed_counter, BPS_TO_TIMER(60));
     
    	set_color_depth(8) ;   // 8 bit colour
    	if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_x, screen_y, 0, 0)<0)
    	{
    	    //set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);  
    	    set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_w, screen_h, 0, 0);
     
         allegro_message("Failure to init video mode!\n%s\n", allegro_error);
    	    exit(1); // force abort
    	}
     
     	 off_screen = create_bitmap(screen_x, screen_y);  
     
     
     	Init_Music();
        Init_Font();
        install_timer(); 
        Play_Music();
        srand(time(NULL));
    	Star star[maxstars];
     
     while ((!key[KEY_ESC])&&(!key[KEY_SPACE])) 
        {
     
            clear_bitmap(off_screen);
     
     
     
     
     
            DrawString((framecount % 2550)-820,508,"TEST SCROLL LEFT TO RIGHT...NO SINUS EFFECT FIRST....");
            framecount+=6;
            vsync();
           blit(off_screen, screen, 0, 0, 0, 0, screen_x, screen_y);  
            rest(1); 
        };
        while(speed_counter > 0)
            {
             for(int i = 0; i < maxstars; ++i)
                                {
                                        star[i].movestars();                 
                                }
                                speed_counter --;
             }
     
            draw_sprite(screen, buffer, 0, 0);       // La fonction qui semble poser problème 
     
     
        destroy_bitmap(off_screen);     
        Kill_Music();
        Kill_Font();
        remove_timer();     
    	return 0;     
    }     
    END_OF_MAIN();
    J'ai donc la fonction DrawString qui va afficher le texte à l'écran, ( il y a une fonction drawcharacter qui récupère les lettres dans une fonte en .pcx) , et la fonction drawsprite pour génerer le starfield,

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Ce code me semble étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_x, screen_y, 0, 0)<0)
    	{
    	    //set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);  
    	    set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_w, screen_h, 0, 0);
    Les variables sont définies ?
    Sinon, faire un set_gfx_mode devant un exit, cela me semble étrange, très étrange.

    Les while fera en sorte que vous ayez un effet après l'autre.

    buffer ne me semble pas initialisé, c'est peut être pour cela que cela plante.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    pour le buffer , il est initialisé en début de code par :

    ensuite il y a une classe qui place les pixels en position start sur l'écran et qui effectue le mouvement en utilisant donc buffer :

    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
     
    Star::Star()
    {
                posx = (rand() % screen_w); 
                posy = (rand() % screen_h); 
                speed = (rand() % 5) + 1;
                putpixel(buffer, posx, posy, makecol(255, 255, 255)); 
     
    void Star::movestars()
    {
              putpixel(buffer, posx, posy, makecol(0, 0, 0));
              posx -= speed;
              if (posx <= 0)
              {
                 posx = screen_w;
              }
              putpixel(buffer, posx, posy, makecol(255, 255, 255 )); 
    }
    concernant le set_gfx_mode , en effet on peut enlever tout ça , le gfx_mode est déjà initié par la condition au dessus, il s'agit de deux codes que je ente de fusionner, ces incohérence viennent du copier/coller,

    mais ne me sautent pas aux yeux car je n'ai pas assez d'expérience en dev C++, c'est comme les while , merci de me l'avoir signalé , le but n'est pas d'avoir les effets un après l'autre mais simultanément, je vais reprendre ça ....

    merci beaucoup d'avoir pris 5 min pour regarder,

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    bon déjà en initialisant le buffer, le prog ne plante plus !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer = create_bitmap(screen_w, screen_h);
    j'ai le scroll en premier puis les étoiles quand je ferme le prog, le but est de les avoir ensemble, je dois avoir un problème avec ma boucle while ...

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonne nouvelle, c'est ce que j'avais dit

    Vous n'avez qu'une seule boucle while ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    et oui j'ai pas percuté immédiatement, j'ai confondu déclaré et initialisé ,

    j'avais bien un souci avec le while, il me reste mainenant à améliorer l'affichage, j'ai bien les deux effets en même temps, mais les couleurs bavent , je nettoie le buffer avant chaque frame...vbl ? à suivre ...

    edit :

    non je nettoyais pas le buffer en fait ..... un grand merci , => résolu

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

Discussions similaires

  1. [AC-2003] code fusion de bases de données
    Par geo_67210 dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/04/2009, 11h02
  2. [XL-2003] Code VBA pour fusion des Dossiers
    Par em_bengue dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/04/2009, 00h03
  3. Réponses: 2
    Dernier message: 16/11/2007, 19h59
  4. Aide newbie configuration code::blocks avec allegro
    Par max---- dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 24/10/2007, 10h39

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