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 :

sprites et animation sur sdl


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Points : 43
    Points
    43
    Par défaut sprites et animation sur sdl
    salut les amis je cherche des sprites pour un joueur qui lance un disque qu'il soit mario ou sonic ou autre
    aussi un tuto qui explique comment faire des animation pour montrer le joueur lancer un disque a partir des photo disponible
    et merci

  2. #2
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    Salut,
    Pour les ressources voir ici http://jeux.developpez.com/medias/

    En ce qui concerne les animations, tu sais peut etre deja que SDL le gere pas, il te faudra une bibliotheque / framework comme SGE (http://www.digitalfanatics.org/cal/sge/index.html) de plus haut niveau, ou implémenter toi même les structures qui vont bien.

    Classiquement, une animation n'est que des coordonnées prédéfinies avec un timer entre chaque frames (rectangle source)

    j'utilise les structures suivantes

    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
     
    typedef struct t_animation {
        int id;                 ///identify a animation (with a number or an enum)
        int frame_delay;        ///time in sec before switch to next frame
        int frame_trigger;      ///count the remaining time before the next frame, must be init at 0
        int frame_current;      ///number of the current frame in the animation
        int frame_default;      ///the default frame, when the animation start or end
        int frame_nb;           ///number of frames in the animation
        bool have_loop;         ///does the animation has loop
        SDL_Rect *v_frame;      ///rect of each frames
    }animation;
     
    /**
        @struct t_anim_sprite
        @brief A sprite with animations, it got a pointer to a simple sprite, and informations
               needeed to animate it. the sprite'simage is the charset, and width and height
               are divded by the number of animations.
               Remember that t_anim_sprite must be manipulated with anim_sprite functions.
        @param p_sprite : regular sprite
        @param v_anim : array of animations
        @param animation_nb : number of animations
        @param animation_current : current animation
        @param number of frames in the charset on x
        @param number of frames in the charset on y
    */
    typedef struct t_anim_sprite {
        int x,y;
        SDL_Rect bounding_box;
        SDL_Rect offset;
        image *p_image;
     
        animation *v_anim;
        int animation_nb;
        int animation_current;
        int frame_nb_x;
        int frame_nb_y;
        int tile_height;
        int tile_width;
        bool have_loop;         //if false, free the animation after the first loop
        bool is_paused;
    }anim_sprite;

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Points : 43
    Points
    43
    Par défaut
    merci mnt j'ai fait ce code mais je le trouve pas bien structurer pouvez vous m'aider à ce point

    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
    /*
    main.c
    ------
     
    Par youssef, pour Le Projet de programmation
     
    Rôle : 
    */
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
        #define TAILLE_BLOC         44 // Taille d'un bloc (carré) en pixels
        #define NB_BLOCS_LARGEUR    24
        #define NB_BLOCS_HAUTEUR    8
        #define LARGEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_LARGEUR
        #define HAUTEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_HAUTEUR
     
     
    #include "constantes.h"
     
     
    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL, *menu = NULL;
        SDL_Surface *sol ;
        SDL_Rect position_sol;
        SDL_Event event;
     
        int continuer = 1,i,j;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Lancer", NULL);
            // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 57, 124, 198));    
     
     
     
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: // Veut arrêter le jeu
                            continuer = 0;
                            break;
                        case SDLK_1: // Demande à jouer
                            continuer = 0;
                            break;
                        case SDLK_2: // Demande l'éditeur de niveaux
                            continuer = 0;
                            break;
                    }
                    break;
            }
     
     
            for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
            {
                for (j = 7 ; j < NB_BLOCS_HAUTEUR ; j++)
                {
                    position_sol.x = i * TAILLE_BLOC;
                    position_sol.y = j * TAILLE_BLOC;
     
                    if(i==2 || i==5 || i==8 || i==11 )
                    sol = IMG_Load("niveau.jpg");
                    else if(i==20)
                    sol = IMG_Load("niveau.jpg");
                    else
                    sol = IMG_Load("Bricks.gif");
     
                    SDL_BlitSurface(sol, NULL, ecran, &position_sol);
                    SDL_Flip(ecran);
                }
            }
     
            position_sol.x = 11 * TAILLE_BLOC;
            position_sol.y = 6 * TAILLE_BLOC;
            sol = IMG_Load("mario.gif");
            SDL_BlitSurface(sol, NULL, ecran, &position_sol);
            SDL_Flip(ecran);
     
     
        }
     
        SDL_FreeSurface(menu);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    voilà le resultat de ce code


    aussi une autre chose comment faire pour ecrire de la meme façon que la photo ci_dessus (mario, world, time) et si le savez la couleur exact du ciel (x,x,x):

  4. #4
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Points : 43
    Points
    43
    Par défaut
    Quelle font police utilise t on ds les jeu de mario comme dans la photo ci_dessus

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 917
    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 917
    Points : 220 488
    Points
    220 488
    Billets dans le blog
    127
    Par défaut
    Bonjour,

    Je pense que pour les écritures, il faut utiliser SDL_TTF, en utilisant un fichier de police correspondant à cette police. Cela peut se trouver assez facilement avec google .

    Par rapport au code, il semble que dans la boucle while, vous charger à chaque fois votre niveau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(i==2 || i==5 || i==8 || i==11 )
                    sol = IMG_Load("niveau.jpg");
                    else if(i==20)
                    sol = IMG_Load("niveau.jpg");
                    else
                    sol = IMG_Load("Bricks.gif");
    L'appel à IMG_Load() doit être fait qu'une seule fois par fichier à chargé. Sinon, cela va remplir la mémoire indéfiniment ... et freezer le système.
    De plus, pour les SDL_Surface, vous devez en avoir une par IMG_Load, du coup.
    Et ça fera déjà mieux.
    Et du coup, on peut faire une deuxième fonction, spéciale pour le chargement.
    Que l'on pourra aussi mettre dans un autre fichier, pour vraiment eclaircir le main.c

Discussions similaires

  1. [FLASH MX] Synchroniser une animation sur un long mp3
    Par calogerogigante dans le forum Flash
    Réponses: 9
    Dernier message: 05/07/2006, 12h37
  2. Réponses: 4
    Dernier message: 26/05/2006, 15h30
  3. [Flash] Préloader une animation sur mon site?
    Par nicotine dans le forum Flash
    Réponses: 2
    Dernier message: 22/05/2006, 13h42
  4. Probleme : load une animation sur une autre
    Par Basicman dans le forum Intégration
    Réponses: 2
    Dernier message: 26/04/2006, 16h14
  5. [FLASH MX] Animation sur bouton en boucle
    Par mascagne dans le forum Flash
    Réponses: 3
    Dernier message: 04/03/2006, 11h36

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