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 :

Créer une animation fluide


Sujet :

SDL

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Créer une animation fluide
    Je poste car j'ai rien vu sur le net, j'ai codé un starfield et je n'arrive pas a faire en sorte que l'animation soit fluide ni avec les timer ni avec SDL_Ticks (avec un simple test dans une boucle).
    J'aimerais savoir si vous avez des "trucs" pour arriver a une animation fluide a tout les coups.
    Faut il faire en sorte que le code soit le seul programme tournant sur la machine (et d'ailleurs est-ce possible ?) afin que ça ne gène pas trop l'animation?
    Merci pour vos hints !

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Moi j'arrive a avoir une animation fluide a tous les coups.
    Il faut respecté 2 choses , un FPS constants , et une 'cadence' de image , je veux dire faut programmé que image soit affiché un certain nombre de fois ,par exemple j'ai une cadence de 2 j'affiche 2 fois l'image avant de passer a la suivante , c'est surtout utile pour les FPS élevé.
    Pour avoir le 'max' de fluidité un fps de 60 est conseillé.

    Enfin chez moi ça donne de bon resultats demo
    (il tourne sur 30 fps).

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    par exemple j'ai une cadence de 2 j'affiche 2 fois l'image avant de passer a la suivante , c'est surtout utile pour les FPS élevé.
    Je comprend pas pourquoi tu affiches 2 fois l'image ? avant de la rafraîchir ?

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Apres si on veut , je parlait dans le sens ou une animation c'est que un défilement image donc bon , mais faire une défilement image est pas suffisant pour que visuellement cela soit correct.

    Pour te répondre :
    Ben imaginons que l'animation de la marche est sur 4 images , sur 40 fps , l'animation est affiché 10 fois par seconde ce qui est beaucoup, sur une cadence de 5(on affiche 5 fois la même image avant de passer a la suivante) la marche est affiché 2fois par seconde ce qui est plus jolie visuellement.

    M'enfin c'est quelque chose qu'il faut régler ça dépend du nombre de animation , du FPS mis ,et de animation en elle meme (si animation représente un mouvement long ou rapide).

    Je pose la question du compte gérer animation par callback ?(vu par rapport a ton ancien post) si c'est le cas c'est pas une bonne idée ,il doit y avoir des moyen pour utilisé mais pas pour ce genre de utilisation.

  5. #5
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Je pose la question du compte gérer animation par callback ?(vu par rapport a ton ancien post) si c'est le cas c'est pas une bonne idée ,il doit y avoir des moyen pour utilisé mais pas pour ce genre de utilisation.
    Non j'ai modifié mon code j'utilise désormais un SDL_GetTicks(), je le compare a chaque boucle, si il y a une différence de plus de 17 ms je ré-affiche mon starfield, par contre en affichant avec un printf le delay j'ai vu que des fois il dépassait largement les 17 ms (une fois j'ai eu 43ms) donc c normal que ça saccade, je pensais que le C serait plus rapide.
    Peut être est-ce a cause des programme qui tourne en tache de fond? (je dis ça car mon cpu tourne autour des 25%)
    Pour te faire une idée voici ma 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
    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
    void anim() {
        int continuer=1;
        Uint32 tempsActuel=0, tempsPrecedent=0;
        SDL_Event event;
        while(continuer) {
            tempsActuel=SDL_GetTicks();
            if(tempsActuel-tempsPrecedent>=17)
            {
                printf("Delay : %d\n", tempsActuel-tempsPrecedent);
                SDL_Flip(ecran);
                tempsPrecedent=tempsActuel;
        SDL_PollEvent(&event);
        switch(event.type) {
            case SDL_QUIT:
                continuer=0;
                break;
            case SDL_KEYDOWN:
                continuer=0;
                break;
        }
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        int i=0, x=0, y=0;
        for(i=0; i<NB_STARS; i++) {
        x=stars1[i][0];
        y=stars1[i][1];
        x+=STEP1;
        if(x>=WIDTH) {
            x=0;
            //y=(int)((double)rand()/(double)RAND_MAX*(HEIGHT-1));
        }
        //if(x>=0&&y>=0&&x<WIDTH&&y<HEIGHT) {
        stars1[i][0]=x;
        //stars1[i][1]=y;
        //}
        *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, RGB1, RGB1, RGB1);
        }
        for(i=0; i<NB_STARS; i++) {
            x=stars2[i][0];
            y=stars2[i][1];
            x+=STEP2;
            if(x>=WIDTH) {
                x=0;
                //y=(int)((double)rand()/(double)RAND_MAX*(HEIGHT-1));
            }
            //if(x>=0&&y>=0&&x<WIDTH&&y<HEIGHT) {
            stars2[i][0]=x;
            //stars2[i][1]=y;
            //}
            *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, RGB2, RGB2, RGB2);
        }
        for(i=0; i<NB_STARS; i++) {
            x=stars3[i][0];
            y=stars3[i][1];
            x+=STEP3;
            if(x>=WIDTH) {
                x=0;
                //y=(int)((double)rand()/(double)RAND_MAX*(HEIGHT-1));
            }
            //if(x>=0&&y>=0&&x<WIDTH&&y<HEIGHT) {
            stars3[i][0]=x;
            //stars3[i][1]=y;
            //}
            *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, RGB3, RGB3, RGB3);
        }
            }
        }
    }

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Alors avant je préfère signalé qql erreur a pas faire.
    Le code est assez mal indenté.

    Ceci doit ce trouver au début de la fonction , pas au milieu d'une boucle.

    La fonction est mal nommé anim la fonction gère trop de chose pour pouvoir s’appellé anim.

    et tu réécris quasiment 3 fois la même chose.

    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
    for(i=0; i<NB_STARS; i++)
                {
                    x=stars3[i][0];
                    y=stars3[i][1];
                    x+=STEP3;
                    if(x>=WIDTH)
                    {
                        x=0;
                        //y=(int)((double)rand()/(double)RAND_MAX*(HEIGHT-1));
                    }
                    //if(x>=0&&y>=0&&x<WIDTH&&y<HEIGHT) {
                    stars3[i][0]=x;
                    //stars3[i][1]=y;
                    //}
                    *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, RGB3, RGB3, RGB3);
                }
    Que tu peut mettre en fonction :

    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
    void affiche(SDL_Surface *ecran,int step,int *stars[],int width,int rgb,int n)
    {
        int i,x,y;
        for(i=0; i<n; i++)
        {
            x=stars[i][0];
            y=stars[i][1];
            x+=step;
            if(x>=width)
            {
                x=0;
                //y=(int)((double)rand()/(double)RAND_MAX*(HEIGHT-1));
            }
            //if(x>=0&&y>=0&&x<WIDTH&&y<HEIGHT) {
            stars[i][0]=x;
            //stars3[i][1]=y;
            //}
            *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, rgb, rgb, rgb);
        }
    }
    Et je viens de capter un truk stars1,2 et 3 sont des variable globale non ?
    Alors les variable global sont a bannir , et utilisation des pointeurs est conseillé.
    Si tu débute assure toi de bien maîtrisé pointeur,Structure et fonction avant de continuer.
    D'ailleurs l'utilisation des define est exagéré ici( qui sont d’ailleurs inutile quand on les mets sous fonction).

    Pour revenir a ton problème , tu n'utilise pas de Delay (sleep ou SDL_Delay peu importe) , donc ton programme tourne en boucle (et donc CPU doit bien être utilisé aux max ),il y a effectivement ta méthode pour gérer le FPS mais ce n'est pas ma préférer vu qu'elle est pas super précise.
    Il y a une autre avec un SDL_Delay(temps); avec temps qui est variable.

  7. #7
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Oui en effet je débute et c'est vrai que j'ai du mal avec les pointeurs je me suis alors laissé tenté par les variables globales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il y a une autre avec un SDL_Delay(temps); avec temps qui est variable.
    Je connais cette fonction ils en parlent dans le tuto du SDZ et ils disent qu'elles n'est pas précises (a cause d'autres programmes pouvant tourner en tache de fond).
    Il y a aussi un autre truc si j'utilise SDL_Delay ça met mon programme en attente mais je dois aussi prendre en compte le temps que prend l'affichage, tu crois que je dois jongler avec les 2 ? (SDL_Ticks et SDL_Delay) ?
    Merci pour ton aide, elle est précieuse !

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 057
    Points
    219 057
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Afin d'obtenir une animation correcte, on peut faire en sorte de séparer l'affichage de la mise à jour de l'animation.
    Pour cela, il n'est pas obligé de faire deux boucles.
    Voici un algorithme qui permet d'expliquer mon architecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    {
         while ( 1 )
         {
              affiche(); // On affiche généralement autant de fois que l'on peut. Si vraiment on veut limiter les FPS, alors on peut rajouter un code utilisant SDL_GetTicks().
     
              // Gestion de l'update
              if ( SDL_GetTicks() - temps_de_la_derniere_update > 20 ) // 20ms, donc 50 update par seconde
              {
                   update();
                   temps_de_la_derniere_update = SDL_GetTicks();
              }
         }
    }
    Ainsi, l'animation est fluide. On peut aussi imaginer un système encore plus avancé, utilisant un delta (le temps entre deux update), qui permettra de faire bouger l'animation selon ce delta (car si cela rame, actuellement, le programme va faire la mise à jour (un pas), dès que le programme reprend le contrôle, mais avec un delta, selon le temps de ralentissement, il va faire plusieurs pas).
    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.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Moi j'aurai fait le contraire: on update autant que possible, et on affiche quand on peut. Il faut juste que l'update prenne en compte la différence de temps depuis la dernière update.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 057
    Points
    219 057
    Billets dans le blog
    120
    Par défaut
    Ah ...

    Mais alors, votre update ne fait pas les calculs de l'IA ? (bon, ok, je sors un peu du contexte de la discussion).
    Je n'arrive pas à voir quels sont les avantages de faire l'update tout le temps ...
    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.

  11. #11
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut ah l'animation ! C'est une des choses les plus délicates à mettre en oeuvre
    Un bon lien classique
    http://www.koonsolo.com/news/dewitters-gameloop/

    sinon le plus simple c'est de prendre la solution de LittleWhite

  12. #12
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Bah l'IA peut être dedans tout comme elle ne peut ne pas l’être. Mais par exemple, pour gérer les mouvements des persos IA ou de la physique, c'est quand même mieux de le faire autant que possible (tant qu'on crame pas son proc, évidemment) pour être sur d'avoir une bonne précision (imagine une intégration d’Euler, si ton pas est plus petit, ça colle plus a la réalité).

  13. #13
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par math_lab Voir le message
    Bah l'IA peut être dedans tout comme elle ne peut ne pas l’être. Mais par exemple, pour gérer les mouvements des persos IA ou de la physique, c'est quand même mieux de le faire autant que possible (tant qu'on crame pas son proc, évidemment) pour être sur d'avoir une bonne précision (imagine une intégration d’Euler, si ton pas est plus petit, ça colle plus a la réalité).
    à ce moment-là il faut détacher le traitement de l'IA dans un thread à part en parallèle,mais ça complexifie l'architecture du jeu

  14. #14
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par stc074 Voir le message
    Je connais cette fonction ils en parlent dans le tuto du SDZ et ils disent qu'elles n'est pas précises (a cause d'autres programmes pouvant tourner en tache de fond).
    Il y a aussi un autre truc si j'utilise SDL_Delay ça met mon programme en attente mais je dois aussi prendre en compte le temps que prend l'affichage, tu crois que je dois jongler avec les 2 ? (SDL_Ticks et SDL_Delay) ?
    Merci pour ton aide, elle est précieuse !
    SDL_Delay n'est pas super précise mais suffisamment pour faire un FPS constant.
    Oui tu peux jongler avec les deux je te le conseille en tous cas.

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Afin d'obtenir une animation correcte, on peut faire en sorte de séparer l'affichage de la mise à jour de l'animation.
    Pour cela, il n'est pas obligé de faire deux boucles.
    Voici un algorithme qui permet d'expliquer mon architecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    {
         while ( 1 )
         {
              affiche(); // On affiche généralement autant de fois que l'on peut. Si vraiment on veut limiter les FPS, alors on peut rajouter un code utilisant SDL_GetTicks().
     
              // Gestion de l'update
              if ( SDL_GetTicks() - temps_de_la_derniere_update > 20 ) // 20ms, donc 50 update par seconde
              {
                   update();
                   temps_de_la_derniere_update = SDL_GetTicks();
              }
         }
    }
    Ainsi, l'animation est fluide. On peut aussi imaginer un système encore plus avancé, utilisant un delta (le temps entre deux update), qui permettra de faire bouger l'animation selon ce delta (car si cela rame, actuellement, le programme va faire la mise à jour (un pas), dès que le programme reprend le contrôle, mais avec un delta, selon le temps de ralentissement, il va faire plusieurs pas).
    Je me pose la question justement cette technique est pas optimal en terme de processus utilisé ?
    Il y a pas de Delay dans ton programme donc tu utilisera le processus des que possible , je trouve pas top surtout pour faire quasiment aucun calcul.
    Apres faire un gros 'if' est pas trop dans mes règle de codage ,sauf si on met une fonction update(); comme tu le met mais faudra mettre pas mal d'arguments ou les mettre dans une Structure et la structure serait assez générique donc bon (sauf si tu utilise des variable global est c'est le mal x) ).

    Moi je montre mon architecture marche très bien jusqu’à présent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Evenment();
    Collision();
    Deplacement();
    Affichage();
    Fps();

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 057
    Points
    219 057
    Billets dans le blog
    120
    Par défaut
    Bah, un jeu, ça prend 100% du CPU, car on s'inquiète pas trop du reste (l'utilisateur, lorsqu'il lance le jeu, ne fait que jouer).
    Sinon, on peut voir avec la limite 60FPS, pour faire en sorte de libérer un peu le CPU.
    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.

  16. #16
    screetch
    Invité(e)
    Par défaut
    ce n'est pas une excuse pour faire du code cradoc qui brûle du petrôle ou de l'uranium pour juste attendre la prochaine frame!!!
    Il n'y a pas besoin d'une précision élevée pour avoir un FPS stable, il y a deux bonnes méthodes:
    - bloquer le rafraichissement a 60FPS: ton programme sera bloqué automatiquement et ne prendra pas de CPU jusqu'a la prochaine frme
    - aller aussi vite que possible et fficher toutes les frame, mais avoir des update de temps variables. La plupart des jeux peuvent aussi faire ainsi. Comme la physique ne passe pas bien en variable, on effectue la physique seulement si la derniere physique calculée a été, mettons, il y a 16 millisecondes. Les autres frame, si on va plus vite on fait un peu d'interpolation et si on va trop lentement on effectue l pysique plusieurs fois.

  17. #17
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Tous a fait d'accord avec screetch pas une raison que un jeu (en 2D en plus) utilise 100% du CPU D= , si tu peux faire moins tu le fais x)
    Mes jeux en 2D utilise 10% de cpu , je vois pas pk il devrait en prendre plus ,a part a cause d'une mauvaise architecture.
    Je pense que mettre un FPS est conseillé/obligatoire.
    Comme le dis screeth , il y a Deux méthode je conseille la premiere pour un code plus facile a voir/maintenir.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 057
    Points
    219 057
    Billets dans le blog
    120
    Par défaut
    J'ai du mal à comprendre screetch, car au final il répète ce que j'ai dit (ou alors je m'exprime très mal). Enfin bref, il a dit ce qui est à dire

    Il ne faut pas croire qu'il y a qu'une seule technique ou deux -> http://www.koonsolo.com/news/dewitters-gameloop/

    Moi, je vois des jeux, du style UT2004, par exemple, qui n'ont pas de blocage FPS mais qui possède un blocage des update, du coup, ça prend 100% du CPU.

    Là, où il y a vraiment un besoin de limiter les FPS, c'est pour les jeux sur smartphone et autre périphérique portable, sinon on crame la batterie et le consommateur ne sera pas content.
    Un jeu XBox / PS3 ne s'inquiète pas trop de cela.

    Après, je ne vois pas où j'ai parlé de code crado. Il suffit de quelques lignes pour faire une limitation des FPS (avec le Sleep).
    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.

  19. #19
    screetch
    Invité(e)
    Par défaut
    j'ai mal lu ton code; j'ai lu que tu bouclais tant que le GetTickCount() n'avait pas atteint 20ms

    mea culpa.

  20. #20
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Oui ben une limitation du cpu est conseillé.
    Apres qu'un autre jeu utilise 100% du cpu alors qu'il pouvait en prendre moins ,surtout si c'est rajouté une ligne comme tu dis me laisse perplexe.
    Je peux faire le reproche pour la mémoire aussi , moins t'en utilise mieux c'est , en gros penser au petite config c'est un plus.

    C'est vrai que de nos jours il n'y a pas de programme qui tourne en fond(sans parler d’antivirus et pour le système exploitation),ça m'arrive de jouer et de parler via skype , et ça devient plus courant avec mumble msn ou autre,perso si on peut faire que nos programme utilise peu de cpu est facilement pk s'en privé ? =P

Discussions similaires

  1. Créer une animation de sprite sous Eclipse
    Par HekThor dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 24/10/2008, 19h30
  2. Créer une animation
    Par soldat yul dans le forum Flash
    Réponses: 7
    Dernier message: 16/07/2007, 17h59
  3. Créer une animation
    Par zappa37 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 13/01/2007, 21h22
  4. [GD] Est-il possible de créer une animation ?
    Par JavaAcro dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 02/03/2006, 16h33
  5. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 10h50

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