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

SDL Discussion :

Etrangement lent ?


Sujet :

SDL

  1. #1
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut Etrangement lent ?
    Hello,

    Je suis en train de faire des essais de débutant en SDL, et j'aimerais faire un menu. Mais la n'est pas mon problème, sur ce menu,j'aimerais qu'au fond se ballade une petite voiture.

    Si je fais dessiner à chaque itération de la boucle principale la voiture, ça laisse une trainée, alors je me suis dit je redessine le menu à chaque fois, mais la ça lag.

    Boucle principale :
    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
     
    while (SDL_PollEvent(&evenement))
            {
                if (evenement.type == SDL_QUIT)
                {
                    quitter = true;
                }
                if (evenement.type == SDL_KEYDOWN)
                {
                    gestion_clavier();
                }
            }
     
            if (x < 1)
            {
                x = 800;
            }
            else
            {
                x--;
            }
            y = 450;
     
            dessiner_menu();
            appliquer_surface(x,y,voiture, ecran);
            // Mise à jour de l'écran
            if (SDL_Flip(ecran) == -1)
            {
                return EXIT_FAILURE;
            }
    dessiner_menu() :
    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
     
    void dessiner_menu(void)
    {
        // Création du fond
        fond_image = charger_image("images/fonds/herbe.bmp");
     
        int x = 0;
        int y = 0;
     
        for (y=0; y<ECRAN_HAUTEUR; y=y+16)
        {
            for (x=0; x<ECRAN_LARGEUR; x=x+16)
            {
                appliquer_surface(x, y, fond_image, ecran);
     
            }
        }
        route = charger_image("images/routes/route_h.bmp");
        x = 0;
        y = 400;
     
        for (x=0; x<ECRAN_LARGEUR; x=x+40)
        {
                appliquer_surface(x,y, route, ecran);
        }
     
        menu[0] = charger_image("images/menu/jouer.bmp");
     
        x = 300;
        for (y=0; y<4; y++)
        {
            appliquer_surface(x, y*100, menu[y], ecran);
        }
    Mais meme sans redessiner le menu, je trouve que ça va lentement pour dire qu'il n'y a pas de sleep ni rien, je sais pas si c'est normal.

    Merci d'avance pour votre aide.

    ++

  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
    Il faut un minimum de réflexion lorsqu'on programme

    Tu as une boucle principale qui doit aller le plus vite possible, est-ce que charger 3 images, faire une boucle comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        for (y=0; y<ECRAN_HAUTEUR; y=y+16)
        {
            for (x=0; x<ECRAN_LARGEUR; x=x+16)
            {
                appliquer_surface(x, y, fond_image, ecran);
     
            }
        }
    Te semble une bonne idée?

    Il faut charger une seule fois tes images avant la boucle et puisque ton image de fond ne va pas changer, pourquoi ne pas faire une surface de la taille de la fenêtre dans laquelle tu appliques toute cette fonction et après tu ne fais qu'un blit de cette image de fond dans la fonction dessinerMenu?

    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        menu[0] = charger_image("images/menu/jouer.bmp");
     
        x = 300;
        for (y=0; y<4; y++)
        {
            appliquer_surface(x, y*100, menu[y], ecran);
        }
    me semble dangereux, les autres cases de menu sont vraiment initialisées?

    Enfin :

    Tous tes chargements se font sans vérifier s'il y a une erreur, ils ne désallouent pas la mémoire si les variables sont déjà en utilisation et sont des variables globales!!!

    On n'utilise pas de variables globales lorsqu'on peut l'éviter...

    Jc

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Et également une petite remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menu[0] = charger_image("images/menu/jouer.bmp");
    Si ta fonction "charger_image" fait bien une lecture dans un fichier pour charger en mémoire l'image, c'est aussi une cause de ralentissement. Tout ce qui est chargement d'image ""doit"" (pas une obligation, mais un conseil) se faire dans une sorte de bloc qui initialise ton menu.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  4. #4
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Ok merci pour ces conseils je vais essayer d'améliorer tout ça et je vous redit

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. BDE lent sur XP PRO
    Par Daniel Nespoulous dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/06/2004, 14h12
  3. TList lente
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/02/2004, 01h01
  4. SQL Server trés lent
    Par arwen dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 07/11/2003, 14h45
  5. Probleme pour les insertion au format etranger
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/03/2003, 10h55

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