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 :

Aide avec SDL_SetClipRect() [SDL 2.0]


Sujet :

SDL

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut Aide avec SDL_SetClipRect()
    Bonjour à tous.

    Je me lance dans un petit jeu vidéo tout simple mais pour l'instant j'explore/étudie/teste différents codes pour bien assimiler les possibilités de la SDL.

    Je suis donc le cour de @Alexandre Laurent, et je me vois bloqué à la partie "Afficher son 1er Sprite.

    Je m'explique.

    J'ai téléchargé (pour m’entraîner), un sprite de mario (mariouniverse.com), que j'ai bidouillé un chouilla pour le rendre plus simple (6 mario : 3 de mario qui marche vers la gauche et 3 autres vers la droite) :

    Nom : Sprite_Mario.gif
Affichages : 338
Taille : 916 octets

    En suivant le tuto sur la SDL2, j'ai réussi à afficher ma 1ere sprite (image découpée au bon endroit pour afficher une petite partie de mon mario marchant vers la gauche).

    Nom : Sans titre-1.gif
Affichages : 249
Taille : 5,9 Ko

    Maintenant, j'aimerais créer l'animation (afficher les autres états de mon mario donc).

    Si j'ai bien compris (ce dont je ne suis pas sur à 100%, d'ou mon post), il faut utiliser le paramètre clip_rect, qui est donc un objet SDL_Rect, dans un objet SDL_Surface !

    Pour un débutant c'est pas simple à piger au début xD.

    Donc de ce que je comprends en gros :

    il me faut créer pour commencer un SDL_Rect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Rect monRectangleSDL;
    ensuite à partir de lui je lui définit une taille et, si j'ai bien compris, cette taille sera donc une sorte de masque ? masque qui va juste afficher la partie de mon rectangle ?

    Donc en code ça me donnerais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    monRectangleSDL.x = monSprite.w / 6; // Définit la position de départ de mon rectangle en x.
    monRectangleSDL.y = 0; // Définit la position en y de mon rectangle.
    monRectandleSDL.w = monSprite.w / 6; // Définit la taille de mon rectangle (comme 6 images sur le sprite on divise la taille par 6).
    monRectangleSDL.h = monSprite.h; // Définit la taille du rectangle.
    Ici j'ai donc si je ne m'abuse un rectangle de la taille de mon sprite que je veux afficher.

    Et pour la suite je ne comprends pas ce que je dois en faire.

    Initialiser SDL_SetClipRect !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_SetClipRect(maSurface, &monRectangleSDL);
    et ensuite je ne comprends pas ce que je dois faire.

    Merci de votre aide !

  2. #2
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Je ne sais pas trop quel rôle pourrait jouer SDL_SetClipRect () dans l'histoire.

    Il s'agirait plutôt de blitter la SDL_Surface qui contient ton sprite sur la SDL_Surface sur laquelle tu fais ton affichage.

    Pour cela tu vas te servir de la fonction SDL_BlitSurface en lui passant en paramètre ton SDL_Rect.

    Bon, je dis ça de mémoire et je n'ai jamais utilisé SDL 2.0 (seulement la 1.2).

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


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

    Je suis content que quelqu'un lit ces tutoriels
    Par contre, non, il ne faut pas utiliser SDL_SetClipRect(). Les rectangle de clipping sont des zones bloquant le rendu (à l'écran et non sur une partie d'une surface). Bon, je dois dire que l'idée est bonne, mais pas la meilleure pour ce que vous voulez faire.

    Pour vous, il faut juste bien utiliser les paramètres de SDL_RenderCopy(). Comme indiqué dans le cours, vous avez quatre paramètres :
    • le SDL_Renderer (sachant que le SDL_Renderer est créé à partir d'une fenêtre, il affichera le sprite sur celle-ci) ;
    • la SDL_Texture à copier ;
    • le rectangle source (permettant ainsi de ne copier qu'une sous-partie d'une texture) ;
    • le rectangle destination.

    Ce sont les deux derniers paramètres qui vous intéressent énormément.

    Dans votre image, vous avez six sprites :
    Leur dimension sont 16x27. Cela veut dire simplement que le premier mario se trouve en :
    0x0
    Le second :
    16x0
    Le troisième :
    32x0
    et ainsi de suite.

    Du coup, lorsque vous utilisez SDL_RenderCopy() et que vous devez lui donner un rectangle source, vous devez lui passer les coordonnées que je viens de citer (suivant le sprite que vous voulez afficher). Ce qui provoque l'animation, ce n'est qu'un changement après un certain temps, de ces coordonnées.
    Pour le rectangle de destination, c'est très simple et je pense que vous savez déjà l'utiliser. Ce sont les coordonnées sur l'écran qu'il faut indiquer (où afficher le sprite).

    Si vous me dites que vous avez utiliser SDL_BlitSurface(), sachez que le principe est entièrement 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.

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    ok c'est parfait merci je vais pouvoir continuer de suivre le cour. encore merci !

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

Discussions similaires

  1. [Débutant] Aide pour demarrer avec java et NetBeans
    Par kachaloarmin dans le forum NetBeans
    Réponses: 2
    Dernier message: 10/11/2007, 00h02
  2. [Débutant] Aide avec les Switch
    Par ggcourtois dans le forum C++
    Réponses: 30
    Dernier message: 01/08/2006, 12h20
  3. [XHTML] [Débutant] Aide pour navigation avec cadres
    Par calogerogigante dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 18/06/2006, 23h43
  4. Débutant: Aide avec nombre Armstrong
    Par D3V1L J4M dans le forum C++
    Réponses: 5
    Dernier message: 31/10/2005, 11h35
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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