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_BlitSurface problème duplication


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Par défaut SDL_BlitSurface problème duplication
    Bonjour,
    Je vais développer un peu plus mon problème:
    J'ai un tableau de SDL_surface *, je le remplis entièrement avec la même image, je teste de les afficher tous et ça fonctionne, maintenant si je blitte une autre image sur n'importe quelle image du tableau, elle se blitte sur toutes les cases.
    A quoi cela serait-il du ?!
    Merci par avance.

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 226
    Par défaut
    Alors ton problème sans code , ça va être dur , tu dis "je le remplis entièrement avec la même image" , comment ? , on mettant la même adresse sur chaque image ? si c'est le cas , ça explique pourquoi quand tu blit sur une image du tableau elle le fait sur toute.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Par défaut
    Désolé, je ne voulez pas poster le code sans être sur que c'était nécessaire:
    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
     
    #ifndef VILLE_HPP_INCLUDED
    #define VILLE_HPP_INCLUDED
     
    class Ville
    {
        private :
            // Contiendra l'architecture de la ville
            Cellule Plan [ VILLE_LARGEUR ] [ VILLE_LONGUEUR ] [ VILLE_HAUTEUR ] ;
     
        public :
            // Pour batir une nouvelle ville
            void Nouvelle_ville ( ) ;
            // Retour l'element de la ville
            Cellule Element ( int X , int Y , int Z ) { return Plan [ X ] [ Y ] [ Z ] ; } ;
    } ;
     
    void Ville :: Nouvelle_ville ( )
    {
        // Sprite temporaire
        SDL_Surface *Temp ;
        // Iterateurs
        int X , Y , Z , I , J ;
        for ( Z = 0 ; Z < VILLE_HAUTEUR ; Z ++ )
        {
            for ( Y = 0 ; Y < VILLE_LONGUEUR ; Y ++ )
            {
                for ( X = 0 ; X < VILLE_LARGEUR ; X ++ )
                {
                    Plan [ X ] [ Y ] [ Z ].Image = NULL ;
                    Plan [ X ] [ Y ] [ Z ].Passage = "Libre" ;
                }
            }
        }
        // Variables des maisons
        int Maison_largeur , Maison_longueur ;
        // On remplit la ville d'herbe
        Temp = SDL_LoadBMP ( "./Sprites/Sols/Herbe.bmp" ) ;
        SDL_SetColorKey ( Temp , SDL_RLEACCEL | SDL_SRCCOLORKEY , SDL_MapRGB ( Temp->format , 255 , 255 , 255 ) ) ;
        for ( Y = 0 ; Y < VILLE_LONGUEUR  ; Y ++ )
        {
            for ( X = 0 ; X < VILLE_LARGEUR ; X ++ )
            {
                Plan [ X ] [ Y ] [ 0 ].Image = Temp ;
            }
        }
        // Creation d'une maison
        Maison_largeur = rand ( ) % 10 + 3 ;
        Maison_longueur = rand ( ) % 10 + 3 ;
        X = rand ( ) % ( VILLE_LARGEUR - Maison_largeur ) ;
        Y = rand ( ) % ( VILLE_LONGUEUR - Maison_longueur ) ;
        Temp = SDL_LoadBMP ( "./Sprites/Sols/Plancher.bmp" ) ;
        SDL_SetColorKey ( Temp , SDL_RLEACCEL | SDL_SRCCOLORKEY , SDL_MapRGB ( Temp->format , 255 , 255 , 255 ) ) ;
        for ( J = Y ; J < Y + Maison_longueur ; J ++ )
        {
            for ( I = X ; I < X + Maison_largeur ; I ++ )
            {
                SDL_BlitSurface ( Temp , NULL , Plan [ I ] [ J ] [ 0 ].Image , NULL ) ;
            }
        }
    }
     
    #endif // VILLE_HPP_INCLUDED
    Donc voilà.

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 226
    Par défaut
    Il faut pas oublier les balises code , c'est plus agréable a lire avec

    Alors oui c'est je que je disais ,tu donne adresse a tout tes tableaux , du coup normal que si tu blit sur n'importe lequel de ton tableau , les autres auront les mêmes modification vu qu'ils pointent tous dans la même adresse mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Plan [ X ] [ Y ] [ 0 ].Image = Temp ;
    C'est la le 'problème'.


    Bon avant de te dire une solution , parce que copier une surface est longue ,et en plus couteux en mémoire que veux tu faire exactement ?

    D'ailleurs ton code est pas super optimisé tu fais des SDL_LoadBMP en plein blit (la lecture au disque dur est longue) , et de plus tu libère pas la mémoire (fuite de mémoire).

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Par défaut
    Pour les fuites de mémoire, j'en suis conscient, mais avant de m'occuper des fuites j'aimerais que ça fonctionne. En gros je voulais que ma classe ville, à sa construction, charge toutes les images qu'elle aurait besoin, et ensuite je n'aurais plus qu'a blitter l'image des coordonnées souhaitées à l'endroit souhaité. Je te montrerais les autres parties du code d'ici demain, j'ai laissé mon projet là où je travaille. Mais merci d'avoir pris le temps de regarder et de répondre.

  6. #6
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 226
    Par défaut
    Alors je que je te conseille te faire , c'est de blitter sur écran , ça t’évitera de copier toutes les surfaces , apres séparer ton code en Init/draw.

    Pour copier une surface il y a ceci :
    http://www.developpez.net/forums/d39...velle-surface/

    PS : oublie pas éditer ton message pour mettre les balises code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème : Duplicate marked into
    Par slopez dans le forum BOUML
    Réponses: 2
    Dernier message: 19/01/2009, 15h39
  2. Réponses: 2
    Dernier message: 16/07/2008, 13h56
  3. Problême duplication collision AS2
    Par laipreu dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 04/09/2007, 10h01
  4. problème duplicate entry
    Par beberd dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/03/2007, 16h54
  5. [C#] Problème duplication intempestive dans treeview
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/06/2006, 10h23

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