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 :

Remplacer Rectangle basique par un sprite


Sujet :

SDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Remplacer Rectangle basique par un sprite
    Bonjour à tous, travaillant actuellement sur un petit projet de casse-brique, je suis confronté à un problème qui me bloque pas mal. Dans le jeu, la balle est actuellement défini par un simple rectangle (un carré plutôt ici) avec SDL_Rect (pour ceux qui connaissent la SDL).

    J'aimerai faire en sorte de remplacer ce rectangle par un sprite que j'ai conçu pour ma balle qui dés le début de mon programme est définit par une structure. Problème, je ne sais absolument pas par où commencer

    J'ai connaissance des fonctions pour afficher l'image ainsi que pour Blit sur la surface (où les mettre ?) mais je ne vois pas comment adapter mon code de façon à ce que ma balle soit définie par mon sprite et non par un rectangle.

    Voici une partie de mon code source :
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    struct ball
    {
        int x;     // abscisse du centre de la balle
        int y;     // ordonnée du centre de la balle
        int w;     // largeur de la balle
        int h;     // hauteur de la balle
        int mvt_x; // mouvement sur l'axe des abscisses
        int mvt_y; // mouvement sur l'axe des ordonnées
    };
     
    void initBall(ball &b)
    {
        b.x=SCREEN_WIDTH/2;
        b.y=SCREEN_HEIGHT/2;
        b.w=TAILLE;
        b.h=TAILLE;
        b.mvt_x=2;
        b.mvt_y=2;
    }
    .
    .
    .
     //Viennent ensuite divers fonctions propres aux déplacement de la balle dans le jeu//
     
    void showBall(ball b, SDL_Surface *s)
    {
        SDL_Rect r;
        r.x=b.x-TAILLE/2;
        r.y=b.y-TAILLE/2;
        r.w=TAILLE;
        r.h=TAILLE;
     
        SDL_FillRect(s,&r,
                SDL_MapRGB(s->format,255,255,255));
    }
     
     
    int main(int argc, char* argv[])
    {
        bool quit=false;
     
        SDL_Surface *screen, *background, *ScorePlayer1, *ScorePlayer2;
        SDL_Event event;
     
        ball b;
     
        SDL_Init(SDL_INIT_EVERYTHING);
        screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,
                SCREEN_BPP,SDL_SWSURFACE);
     
         initBall(b);
     
         while(!quit)
        {
            SDL_FillRect(screen,&screen->clip_rect,
                    SDL_MapRGB(screen->format,0,0,0));
     
     
            showBall(b,screen);
     
            SDL_Flip(screen);
     
            while(SDL_PollEvent(&event))
                if(event.type==SDL_QUIT)
                    quit=true;
     
                SDL_Delay(0);
            }
     
            SDL_FreeSurface(screen);
            SDL_Quit();
            return EXIT_SUCCESS;
        }
    struct ball
    {
        int x;     // abscisse du centre de la balle
        int y;     // ordonnée du centre de la balle
        int w;     // largeur de la balle
        int h;     // hauteur de la balle
        int mvt_x; // mouvement sur l'axe des abscisses
        int mvt_y; // mouvement sur l'axe des ordonnées
    };
     
    void initBall(ball &b)
    {
        b.x=SCREEN_WIDTH/2;
        b.y=SCREEN_HEIGHT/2;
        b.w=TAILLE;
        b.h=TAILLE;
        b.mvt_x=2;
        b.mvt_y=2;
    }
    .
    .
    .
     //Viennent ensuite divers fonctions propres aux déplacement de la balle dans le jeu//
     
    void showBall(ball b, SDL_Surface *s)
    {
        SDL_Rect r;
        r.x=b.x-TAILLE/2;
        r.y=b.y-TAILLE/2;
        r.w=TAILLE;
        r.h=TAILLE;
     
        SDL_FillRect(s,&r,
                SDL_MapRGB(s->format,255,255,255));
    }
     
     
    int main(int argc, char* argv[])
    {
        bool quit=false;
     
        SDL_Surface *screen, *background, *ScorePlayer1, *ScorePlayer2;
        SDL_Event event;
     
        ball b;
     
        SDL_Init(SDL_INIT_EVERYTHING);
        screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,
                SCREEN_BPP,SDL_SWSURFACE);
     
         initBall(b);
     
         while(!quit)
        {
            SDL_FillRect(screen,&screen->clip_rect,
                    SDL_MapRGB(screen->format,0,0,0));
     
     
            showBall(b,screen);
     
            SDL_Flip(screen);
     
            while(SDL_PollEvent(&event))
                if(event.type==SDL_QUIT)
                    quit=true;
     
                SDL_Delay(0);
            }
     
            SDL_FreeSurface(screen);
            SDL_Quit();
            return EXIT_SUCCESS;
        }

  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
    Il faudrait utiliser IMG_Load si c'est bien compris (ça demande d'avoir SDL_image par contre comme lib).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Merci de ta réponse. Je possède la lib SDL_Image mais où intégrer IMG_Load (qui permet bien de déclarer le sprite à utiliser non ?) et que modifier (rajouter ?) en conséquence?

  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
    Quel est le souci exactement , tu ne sais pas utiliser la fonction IMG_Load ?
    Elle créer une SDL_Surface et on l'affiche grace a la fonction SDL_BlitSurface , bref sur le net la SDL regorge de documentation , tuto ect pour plus de détails.

Discussions similaires

  1. Camshift, remplacer une ellipse par rectangle
    Par NoNo_32 dans le forum OpenCV
    Réponses: 2
    Dernier message: 03/04/2014, 21h37
  2. Réponses: 2
    Dernier message: 26/07/2005, 21h44
  3. Réponses: 5
    Dernier message: 30/05/2005, 16h58
  4. Réponses: 2
    Dernier message: 15/03/2005, 15h40
  5. Remplacer plusieurs colonnes par un 'alias'
    Par zestrellita dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/04/2004, 16h51

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