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 :

SDL_Surface et rafraichissement de l'ecran


Sujet :

SDL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 81
    Points
    81
    Par défaut SDL_Surface et rafraichissement de l'ecran
    Bonjour a tous,

    Voila en fait je suis en train de faire une petite application en C++, a laquelle on peut passer un nombre de ligne (nbline)et de colonne (nbcol) en parametre, a partir de ces parametres je dois dessiner a l'ecran des case de 80*80 pixels autant de fois sur l'abscisse que nbcol et pareil sur l'axe des ordonnees pour nbline.

    Bien evidemment la taille de l'ecran etabli et recuperer grace a la fonction "SDL_SetVideoMode" est de taille fixe soit 800*600.

    Ce que j'aimerai faire, c'est de dessiner en fait les cases, et si le nombre est superieur a l'ecran, pouvoir avec les fleches me deplacer sur le reste de ma map.

    Pour arriver a ceci, j'ai tout dabord suivi ce tutorial : http://lazyfooproductions.com/SDL_tu...18/preview.php

    Mais la ou j'ai un probleme c'est que je n'ai pas un seul background de type SDL_Surface, mais une multitude de SDL_Surface egale au nombre de case a dessiner dans mon ecran principal.

    Bien evidemment il est inconcevable que decale une a une chaque case pour etablir un effet de scrolling alors j'ai essayer differente methodes notamment deux que j'explique :

    La premiere etait de dessiner toutes mes case dans la SDL_Surface recuperer avec la fonction SDL_SetVideoMode (Mon ecran).
    Une fois ceci d'effectuer je me deplacais dans mon ecran comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SDL_Rect    dest;
     
        dest.h = HEIGHT_SCR;
        dest.w = WIDTH_SCR + (avancement);
        dest.x = 10;
        dest.y = 0;
        SDL_BlitSurface(gl_screen, NULL, gl_screen, &dest);
    Soit recuperer mon ecran de taille 800*600 et l'afficher dans lui meme avec un decalage en X de 10, ce qui fonctionne certes mais l'ecran n'est pas rafraichit meme apres un SDL_Flip ca laisse des traces degueu.


    La deuxieme methodes a ete de BLITER toutes mes cases dans un SDL_Surface different de l'ecran, appeler map.
    Cette map a ete etabli avec la fonction SDL_SetVideoMode de largeur egale au nombre de colonne*largeur d'une case et de taille ligne*largeur d'une case.

    ensuite je blittait cette map dans l'ecran, mais le resultat etait le mm que pour la premiere methodes, le rafraichissement ne se faisait pas ou se faisait mal...

    POUR TERMINER.

    Ce que j'aimerai faire :

    Avoir un conteneur de case et ne faire QUE deplacer, soit l'ecran, soit la map et pas chaque case...

    MERCI

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 81
    Points
    81
    Par défaut
    a mes questions la fonction SDL_AllocSurface a repondue.

    Je blit toutes mes SDL_Surface representants les cases a l'interieur, puis je blit la surface renvoyer par SDL_AllocSurface sur mon screen (screen = SDL_SetVideo...())

  3. #3
    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
    Citation Envoyé par red210
    a mes questions la fonction SDL_AllocSurface a repondue.

    Je blit toutes mes SDL_Surface representants les cases a l'interieur, puis je blit la surface renvoyer par SDL_AllocSurface sur mon screen (screen = SDL_SetVideo...())
    Attention, SDL_AllocSurface n'est qu'une macro (du moins avec l'implémentation que j'ai sur mon ordi qui doit être la dernière) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define SDL_AllocSurface    SDL_CreateRGBSurface
    il serait plus sage d'utiliser directement :
    Et, si tu as fait ce que je crois, oui c'était la seule bonne solution. Par contre, en graphisme on dit généralement qu'il faut mieux ajouter des calculs pour limiter le nombre de pixels dessinés inutilement.

    Ta solution fonctionne mais sera sûrement plus lente qu'une version qui ne dessine QUE ce qui est nécessaire.

    Jc

Discussions similaires

  1. Rafraichissement de l'ecran ?
    Par CyberTwister dans le forum Windows
    Réponses: 5
    Dernier message: 06/04/2007, 09h05
  2. [C#] Rafraichissement ecran
    Par heavydrinker dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/09/2006, 11h59
  3. Rafraichissement d'ecran
    Par lanageuse56 dans le forum C
    Réponses: 2
    Dernier message: 03/04/2006, 11h45
  4. [c#] rafraichissement ecran
    Par albedo dans le forum C#
    Réponses: 3
    Dernier message: 08/11/2005, 09h53
  5. [TP]Optimiser le rafraîchissement de l'écran en mode texte?
    Par Ponytear dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 15/02/2004, 11h12

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