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 :

De très légères saccades ?


Sujet :

SDL

  1. #21
    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
    (je n'avais pas percuté) : il ne faut pas que tu utilises SDL_Delay() dans la boucle de message c'est une extrêmement mauvaise chose ; tout simplement parce que c'est une instruction qui risque d'être asynchrone.
    Dans la logique des choses si tu veux afficher des bitmaps ou faire une action ( par exemple déterminer un path-finding ) puis après tu demandes une suspension d'exécution avec SDL_Delay(), bon eh bien si l'affichage des bitmaps prend un certain temps et qu'il n'est pas totalement fini le programme rencontre SDL_Delay() ce qui risque de désynchroniser le bon fonctionnement des choses.
    SDL_Delay() c'est une mauvaise habitude de programmation un peu comme SleepEx en win32...

    La solution c'est que tu calcules un delta de millisecondes et tu testes si ce delta de ms est inférieur à une certaine valeur pour mettre à jour les sprites.

    Regarde sur mon profil j'avais posté un petit code source de bomberman sinon regardes les tutos du site il doit y avoir cela..

    Citation Envoyé par cabrif Voir le message
    Et puis j'ai essayé sans timer du tout, ...
    C'est une mauvaise chose ; si tu mets pas de synchro temporelle, ton jeu va tourner normalement sur une machine ancienne et trop rapidement sur une machine plus rapide

    Citation Envoyé par cabrif Voir le message
    pour voir si ça venait vraiment de SDL_GetTicks() ou SDL_Delay.. mais non le problème persiste.
    Mais pourquoi s'entêter à utiliser SDL_Delay()? SDL_Delay on l'utilise par exemple pour temporiser l'interaction avec un menu un chargement de ressources mais PAS dans le rendu d'affichage

  2. #22
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Je vais regarder tes sources, mais bon je suis sceptique (jusqu'à présent rien n'a marché).
    Sinon, le test sans timer était là purement pour essayer de cibler le problème, je compte bien réguler la vitesse du mon jeu.
    Et SDL_Delay() si je l'utilise c'est pas pour rien, c'est parce que je l'ai rencontré dans des tutos où il était dit que ça permettait de donner la main au processeur, de le laisser souffler un peu et donc de diminuer les ressources processeur utilisées. Et j'ai effectivement constaté qu'avec un SDL_Delay() je passais de 70-80% du proc à 1-2% ... (sans changement constaté au niveau de la vitesse du jeu etc.. justement ces saccades dont je parle (tu ne les a jamais constatées au fait?) se manifestent avec ou sans SDL_Delay(), et avec ou sans gestion du temps, elles sont juste ... là) ! Y a un autre moyen de gérer les ressources du processeur utilisées ? (70% pour un petit jeu 2d c'est vraiment exagéré..)

    Edit : je vois rien dans ton profil

  3. #23
    Membre habitué Avatar de Polyfructol
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2007
    Messages : 131
    Points : 157
    Points
    157
    Par défaut
    Tu dis que c'est pas vraiment des saccades mais plutôt des sortes de sauts d'image, et bien c'est dû à ta synchro verticale. Si ton écran est à 80Hz, il vaut mieux mettre le pallier des FPS à 80. Sinon, à 60 FPS tu aura un léger décalage entre le rafraichissement de l'image et le rafraichissement de ton écran, d'ailleurs c'est aussi bien visible à 90FPS.

    Après c'est pas vraiment un problème, et quand un jeu est bien rempli, avec des trucs qui bouge un peu partout on y fait plus attention. D'ailleurs je sens que cette saccade t'obsède (ça me fait pareil ), bon j'espère que ça règlera ton problème.

    P'tite astuce si tu veux bien voir ton problème de synchro verticale bien fine, c'est de dessiner des barres verticales et de les faire bouger de droite à gauche assez rapidement, si ton affichage est pas synchroniser tu verra de belles bandes comme ça.

    (70% pour un petit jeu 2d c'est vraiment exagéré..)
    70% des ressources PC c'est parce que tu ne laisse aucune pause au PC, et qu'il bouffe toutes les ressources possibles. Moi je m'amuse à programmer des p'tits trucs dans la même résolution que toi, 320/240, et les ressources proc ne dépasse pas 10% quand mon jeu tourne à 80 FPS, par contre si je le fait tourner à 1000, ben là le chipset graphique commence à chauffer et les ressources proc. montent, ce qui est normal, même pour un jeu pourri, même pour un écran noir.

    Lance n'importe quel programme dans une boucle infinie et ton proc. va prendre chauffer ! J'viens de faire un test avec un hello world, et c'est le cas. ('tain j'aurais pas cru qu'un Hello World fasse chauffer mon PC )

Discussions similaires

  1. Affichage très saccadé !
    Par jlb59 dans le forum Windows XP
    Réponses: 9
    Dernier message: 09/05/2011, 07h32
  2. déplacement d'un label très saccadé
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 20
    Dernier message: 13/01/2008, 00h02
  3. glissement d'objet très saccadé même en mode création
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/01/2008, 11h23
  4. base de données très légère
    Par julio02200 dans le forum Excel
    Réponses: 4
    Dernier message: 28/10/2007, 00h39
  5. saccades très bizarres
    Par Myth_Titans dans le forum SDL
    Réponses: 3
    Dernier message: 26/08/2006, 17h19

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