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 :

Blit d'une surface sur une autre...?


Sujet :

SDL

  1. #1
    Invité
    Invité(e)
    Par défaut Blit d'une surface sur une autre...?
    Salut à tous !!!

    Bon voila, je vous explique rapidement le contexte : je suis en train de développer un tetris dans le cadre d'un projet a rendre pour la rentré en septembre, en C avec la SDL...

    En fait, j'ai mon ecran (SDL_Surface *pScreen) et une autre surface qui représente le fond de la zone de jeu (SDL_Surface *pFond), remplie d'une couleur.

    J'ai un probleme lorsque je veux blitter les pieces sur ce fond : en fait, voici quelques petits bouts de code pour vous expliquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /* pour définir la position d'affichage d'un bloc */
    bloc.x = posiX ;
    bloc.y = posiY ;
    bloc.w = LARG_BLOC ;
    bloc.h = HAUT_BLOC ;
     
    /* charge le bmp correspondant a un bloc */				
    pBloc = SDL_LoadBMP("img/tile.bmp");

    Jusque là aucun probleme... c'est là que je bloque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /* blit de la surface pBloc sur le fond pFond */
    SDL_BlitSurface(pBloc, NULL, pFond, &bloc);
    SDL_Flip(pFond);
    Le fond s'affiche bien toujours, pas de probleme... en revanche le bloc ne s'affiche pas, je ne comprends pas trop... pour l'instant je n'ai pas trouvé d'autre moyen que de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_BlitSurface(pBloc, NULL, pScreen, &bloc);
    Mais cela m'oblige a exprimer les coordonnées du bloc en fonction de screen et pas du fond....


    Voilà j'avoue que je bloque totalement... j'ai trouvé un moyen de m'en sortir mais c'est pas très pratique...si vous pouvez m'aider, ce serait sympa de votre part...

    Merci d'avance, et désolé pour la longueur
    ++,


    PierreAd[/code]

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    As-tu essayé en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Flip (pScreen)
    ? Parceque l'inversion du buffer, tu doit la faire sur le pointeur pScreen et non sur un quelconque pointeur étant donné que c'est le pScreen que tu as définit en double buffer je suppose !

    Aussi, a titre indicatif, l'inversion du buffer d'affichage ne sa fait qu'une seule et unique fois par tour de boucle, CàD à la fin de chaque tour de boucle, quand tu as fini le traitement de toutes tes surfaces et autres éléments divers sinon ca ne marchera pas mieux !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Tu essaye avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_UpdateRect(pFond,0,0,0,0);
    plutôt qu'avec un SDL_Flip.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ha j'y avais pas pensé a cui'là
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Invité
    Invité(e)
    Par défaut gniarf....ça fonctionne pas :'(
    Salut a vous deux, merci d'avoir pris la peine de me répondre !!!

    Pour la premiere suggesiton, en fait j'ai du me tromper, je fais bien SDL_Flip(pScreen), mais ça fonctionne pas mieux.... sinon, pour le SDL_UpdateRect(...), ben pareil, ça ne fonctionne pas du tout... j'ai mon fond, mais rien ne s'affiche dessus, je ne comprends pas...

    Si vous voulez voir la partie de mon code qui pose probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bloc.x = (posiX + x) * LARG_BLOC ;
    bloc.y = (posiY + y) * LARG_BLOC ;
    bloc.w = LARG_BLOC ;
    bloc.h = LARG_BLOC ;
     
    pBloc = SDL_LoadBMP("img/tile.bmp");
    SDL_BlitSurface(pBloc, NULL, pFond, &bloc);
     
    SDL_Flip(pScreen)       /* ou SDL_UpdateRect(pFond) */

    Je comprends toujorus pas le probleme, normalement je peux bien blitter une surface sur une autre je vois pas le probleme ???

  6. #6
    mat.M
    Invité(e)
    Par défaut Re: [SDL] Blit d'une surface sur une autre...?
    Citation Envoyé par PierreAd
    Le fond s'affiche bien toujours, pas de probleme... en revanche le bloc ne s'affiche pas, je ne comprends pas trop... pour l'instant je n'ai pas trouvé d'autre moyen que de faire :
    c'est pas un problème tout c.. d'affichage ??
    En fait le bloc s'affiche bien mais on n'a pas le temps de le voir parce que l'image à l'écran est écrasée par celle qui suit après , en l'occurence le fond
    Il faut afficher le fond EN PREMIER puis le bloc après

    est-ce que les coordonnées d'affichage sont bonne ????
    Procéder à un test avec des coordonnées absolues codées en dur comme par exemple x0=10 y0=10 x1=50 y1=50


    Dans un jeu il faut obligatoirement temporiser l'affichage

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut à toi !!!

    En fait le bloc s'affiche bien mais on n'a pas le temps de le voir parce que l'image à l'écran est écrasée par celle qui suit après , en l'occurence le fond
    Il faut afficher le fond EN PREMIER puis le bloc après
    Ben... pourtant quand je fais mon SDL_BlitSurface(pBloc, NULL, pFond, &bloc); , j'affiche bien le pBloc SUR le pFond, selon le "format" défini par bloc ? J'affiche le fond par dessus ensuite d"apres ce que tu me dis, mais comment, je ne vois pas ?

    Dans un jeu il faut obligatoirement temporiser l'affichage
    Càd ??? Tu peux m'expliquer un peu plus stp, je débute dans la programmation de jeux...


    Merci a ceux qui veulent bien m'aider, c'est super sympa de votre part..
    Bonne soirée a tous,


    PierreAd

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 13h58
  2. Réponses: 6
    Dernier message: 12/02/2008, 15h58
  3. Réponses: 2
    Dernier message: 18/06/2007, 16h29
  4. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 19h46
  5. Réponses: 3
    Dernier message: 16/01/2006, 17h02

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