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

 C Discussion :

Déplacement de sprites


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Points : 57
    Points
    57
    Par défaut Déplacement de sprites
    Bonjour, je débute dans le C, est je voudrais savoir comment faire déplacer un sprites (4 images) dans chacune des directions (gauche, droite, haut et bas).

    J'ai essayer de faire quelque chose, mais comme vous le devinez, sa ne marche pas. Sinon, je ne serait pas ici. ^^'

    Voila, mon code : main.c

    Code C : 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    enum {HAUT, BAS, GAUCHE, DROITE};
     
    int main(int argc, char *argv[])
    {
    void jeux(SDL_Surface* ecran)
    {
        SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de Mario
        SDL_Surface *marioActuel = NULL, *largeur_positionMario, *hauteur_positionMario;
       SDL_Rect position, positionMario;
    positionMario.x = 30;
    positionMario.y = 30;
        SDL_Event event;
        int continuer = 1;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Deplacer Mario sur un ecran blanc !", NULL);
     
        /* Chargement des images */
        mario[BAS] = IMG_Load("mario_bas.gif");
        mario[GAUCHE] = IMG_Load("mario_gauche.gif");
        mario[HAUT] = IMG_Load("mario_haut.gif");
        mario[DROITE] = IMG_Load("mario_droite.gif");
        marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ
     
       /* On centre Mario à l'écran */
     
    position.x = positionMario.x * 12;
    position.y = positionMario.y * 12;
     
     
     
    SDL_EnableKeyRepeat(10, 10);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_UP: // Flèche haut
                            positionMario.y--;
                            break;
                        case SDLK_DOWN: // Flèche bas
                            positionMario.y++;
                            break;
                        case SDLK_RIGHT: // Flèche droite
                            positionMario.x++;
                            break;
                        case SDLK_LEFT: // Flèche gauche
                            positionMario.x--;
                            break;
                    }
                    break;
            }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
            SDL_BlitSurface(marioActuel, NULL, ecran, &positionMario); /* On place Mario à sa nouvelle position */
            SDL_Flip(ecran); /* On met à jour l'affichage */
        }
     
        SDL_FreeSurface(marioActuel);
        SDL_Quit();
    }
    }

    Merci d'avance à ceux qui vont me permettre de corriger mes erreurs.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Tu as posté au mauvais endroit, il y a une partie du forum consacré à la SDL, et ton problème semble lier à la SDL. ( enfin pas trop grave )

    Premier truc que j'ai vu, c'est que lorsque tu appuie sur une touche, tu ne change pas ton sprite ( variable marioActuel )

    Deuxième problème, à la fin du programme , tu ne désalloue pas toute la mémoire ( tu fais juste un SDL_FreeSurface de marioActuel, mais pas de Mario[HAUT] , mario[BAS] ... )
    En fait, il faut désallouer les 4 marios, et pas marioActuel pour eviter de desallouer deux fois le même.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Points : 57
    Points
    57
    Par défaut
    Bonjour, j'ai corriger les erreurs que vous m'avez dis, mais à la compilation, quand je clic sur l'exe, il n'y a rien qui se passe, elle ne s'ouvre pas.

    Code c : 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    enum {HAUT, BAS, GAUCHE, DROITE};
     
    int main(int argc, char *argv[])
    {
    void jeux(SDL_Surface* ecran)
    {
        SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de Mario
        SDL_Surface *marioActuel = NULL, *largeur_positionMario, *hauteur_positionMario;
       SDL_Rect position, positionMario;
    positionMario.x = 30;
    positionMario.y = 30;
        SDL_Event event;
        int continuer = 1;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Deplacer Mario sur un ecran blanc !", NULL);
     
        /* Chargement des images */
        mario[BAS] = IMG_Load("mario_bas.gif");
        mario[GAUCHE] = IMG_Load("mario_gauche.gif");
        mario[HAUT] = IMG_Load("mario_haut.gif");
        mario[DROITE] = IMG_Load("mario_droite.gif");
        marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ
     
       /* On centre Mario à l'écran */
     
    position.x = positionMario.x * 12;
    position.y = positionMario.y * 12;
     
     
     
    SDL_EnableKeyRepeat(10, 10);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_UP: // Flèche haut
                            marioActuel = mario[HAUT];
                            positionMario.y--;
                            break;
                        case SDLK_DOWN: // Flèche bas
                            marioActuel = mario[BAS];
                            positionMario.y++;
                            break;
                        case SDLK_RIGHT: // Flèche droite
                            marioActuel = mario[DROITE];
                            positionMario.x++;
                            break;
                        case SDLK_LEFT: // Flèche gauche
                            marioActuel = mario[GAUCHE];
                            positionMario.x--;
                            break;
                    }
                    break;
            }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
            SDL_BlitSurface(marioActuel, NULL, ecran, &positionMario); /* On place Mario à sa nouvelle position */
            SDL_Flip(ecran); /* On met à jour l'affichage */
        }
     
        SDL_FreeSurface(marioActuel);
        SDL_FreeSurface(mario[HAUT]);
        SDL_FreeSurface(mario[BAS]);
        SDL_FreeSurface(mario[DROITE]);
        SDL_FreeSurface(mario[GAUCHE]);
        SDL_Quit();
    }
    }

    Merci, encore.

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 59
    Points : 48
    Points
    48
    Par défaut
    Qu'est ce que vient faire ta fonction jeu dans ton main() ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Points : 57
    Points
    57
    Par défaut
    Ha, super c'est trop bon, je suis arriver.
    J'ai virer la fonction "jeu" est puis j'ai simplement rajouter :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_Surface *ecran = NULL;

    Est sa marche
    Merci, encore.

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

Discussions similaires

  1. question sur le déplacement de sprites
    Par dragonno dans le forum Débuter
    Réponses: 9
    Dernier message: 09/11/2010, 14h10
  2. [C] déplacement des sprites: comment faire?
    Par SimpleMe dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 07/12/2007, 21h33
  3. [ClanLib] Déplacement de sprite
    Par quadra38 dans le forum Moteurs 3D
    Réponses: 1
    Dernier message: 14/12/2006, 19h52
  4. Réponses: 2
    Dernier message: 26/07/2006, 00h33
  5. [DelphiX] Mouvement et déplacement de Sprite
    Par arn_be dans le forum Composants VCL
    Réponses: 6
    Dernier message: 09/03/2005, 15h31

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