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

XNA/Monogame Discussion :

Classe Sprite, une par programme ou une par image?


Sujet :

XNA/Monogame

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 19
    Points
    19
    Par défaut Classe Sprite, une par programme ou une par image?
    Bonsoir,

    ma question risque de faire chaviré certain d'entre vous face a mon noobisme incommensurable.

    Mais il y a une chose que j'ai du mal a comprendre, les classe "Sprite".

    J'ai cru comprendre que la classe Sprite permet de mettre toute les informations sur une image, de manière a rendre le code plus propre.

    Cependant, j'ai l’habitude de faire des classes (pas en XNA) qui comporte :
    1/ déclaration
    2/ Constructeur
    3/Méthodes

    Je ne vois aucun constructeur sur la classe sprite. Cela veut dire que chaque image doit avoir sa propre classe sprite?

    J'aurais plutôt imaginer faire une classe sprite de base, avec son constructeur, puis faire d'autre classe en utilisant le principe de l'héritage (se qui consiste donc a faire un constructeur en s'aident de la classe sprite parent). Dans se cas la, aurais-je besoin d'une liste pour enregistré chaque image?

    J'ai simplement vu récemment l'héritage en cours, il est possible que je mélange pas mal de choses. Je m’excuse donc par avance si vous avez a subir l'anarchie qui règne dans ma boite crânienne.

    En vous remerciant par avance de votre aide, Anto.

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


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

    Je dirai, il faut avoir une instance de Sprite, pour chaque élément que vous voulez dessiner à l'écran. Il y a d'autre façon de faire, mais la plus simple me semblerai celle-ci.
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Je vois, donc ma classe sprite de mon personnage A devra contenir sa vitesse, sa direction, etc...

    Mais si je me retrouve a avoir par exemple 5-6 image pour le même personnage? (Il me semble que se sera ma seul manière de faire pour crée une petite animation, bien que non parfaite).

    Je devrais donc charger mes 5 image dans la même classe? Ou bien je devrai procédais autrement?

    Mon but étant d'apprendre a avoir un code propre pour pouvoir apporté des modif plus tard.


    Et merci de ta réponse rapide! (On peut se tutoyer j'espère?)


    ajout : j'imagine mal 100 spirte si on a 100 éléments différents portant pourtant sur le même personnage a vrais dire ^^'.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    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 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    En théorie, on charge une seule image (spritesheet) pour les animations et à chaque image, on affiche un morceau différent de l'image totale.
    Donc, toujours une seule instance de Sprite, en théorie, même dans le cas des animations.

    Pour la classe Sprite, elle ne doit pas contenir la vitesse ni rien de ce genre. C'est pas à la classe Sprite de gérer (en pure orienté objet). La classe Sprite, doit juste charger l'image (et encore, en très pur orienté objet, on utiliserai une autre classe pour ça -> http://blog.emmanueldeloget.com/inde...abilite-unique ) et savoir l'afficher.

    Par contre, prenons la classe Joueur. Celui-ci contiendra une instance de Sprite (pour s'afficher) et ajoutera des informations genre, sa vitesse ou autre.

    --
    Pour le tutoiement, y a pas de soucis.
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Oulala donc le tuto que je suis ne me dit pas que de bonnes choses alors.

    Je cite la partie que tu corrige :

    Voici ce que je propose (ce n'est évidemment pas la seule solution, il y en a de nombreuses valables).

    Le Texture2D : je ne pense même pas avoir besoin de l'expliquer :p mais il s'agit de notre image chargée en mémoire.

    La position : il s'agit évidemment de la position du coin supérieur gauche ou sera dessiné notre image.

    La direction : ici aussi je pense que ce n'est pas compliqué, c'est la direction de déplacement de notre Sprite. Cependant à chaque modification de cet élément, on s'assurera qu'elle est normalisée pour les raisons que j'ai donnée dans un chapitre précédent.




    La vitesse : définira la vitesse de déplacement du Sprite dans la direction donnée par la caractéristique précédente.

    Voici selon moi les caractéristiques indispensables à tout Sprite, on va maintenant voir de quelles fonctionnalités nous allons avoir besoin

    Je vais étudier ton lien dans la journée, merci de ton aide.


    Ajout :

    pour les animations et à chaque image, on affiche un morceau différent de l'image totale.
    Je crains que cela demande des connaissances un peut trop élever en graphisme? Je ne pense pas me lancer dans quelque chose de si compliquer pour mon premier projet, bien que je prenne note de se qu'il faut théoriquement faire.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    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 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    Comme je l'ai dit, il y a différente façon de faire. La mienne aura surement des avantages et des inconvénients. J'ai juste donné un exemple, exemple de ce que j'ai l'habitude de faire.
    Vous avez un tutoriel sur les animations ici : http://loka.developpez.com/tutoriel/sdl/animation/

    Sinon, en bref, prenons un spritesheet :


    Les trois premières images (la première ligne) permette d'animer la marche vers la droite. Les autres, la marche sur la gauche.
    Ok, vous n'allez pas afficher l'image en entière, sinon, vous allez avoir 6 chats à l'écran (même si c'est mignon, ce n'est pas ce que nous voulons aujourd'hui ). Donc, vous allez dire, dans votre fonction d'affichage, que vous voulez dessiner uniquement le premier chat (ou plus précisément, dessiner uniquement le rectangle de 0x0, jusqu'à 32x32 (j'ai pris des coordonnées arbitraires, cela dépend de la taille du sprite et autre)). Ok, vous n'avez plus qu'un chat, mais nous voulons une animation. L'animation se fait en disant : pendant un certain temps (court) je dessine le premier chat, puis le second, puis le troisième, puis le premier ...
    Cela veut dire, que les 100 premières millisecondes, je vais dessiner le premier chat, ou, dans mon exemple, le rectangle 0x0 jusqu'à 32x32. Ensuite, je vais dessiner, les 100 prochaines millisecondes, le second rectangle : 32x0 jusqu'à 64x32 , puis le troisième 64x0 jusqu'à 96x32. Et je reviens au premier.
    Et vous allez voir, grâce à ce changement rapide de l'image dessinée, vous allez obtenir une animation.
    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.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonsoir !

    Je me suis remis a mon rythme au XNA, a coup de petit test.

    Je tient a te remercier car tes conseils se sont avéré très utiles, bien que je ne sais toujours pas faire d'animation ^^.

    Je bloc actuellement sur deux choses.

    1/ L'utilisation du gameTime que XNA nous fournie, qui devrais si je ne me trompe pas me servir a temporisé (toute les 0.5sec, 1sec, etc...) Bien que je comprenne le principe, j'ai du ma a trouver la bonne méthode (je ne veut pas faire un compteur tout moche que serais augmenter de 1 a chaque fois qu'on passe dans le update, je veut utiliser se que XNA prévois).

    2/Je ne sais pas comment m'y prendre pour ne prendre qu'une partie d'une grande image...
    Des méthodes devrais être mise a ma disposition, mais si j'ai bien tenté d'utiliser les bonnes je ne sais pas m'en servir...


    Sinon je t'informe que je commence tout doucement a crée mon tout premier jeu. Des animations ne serons pas forcément nécessaire mais sa rendrais tout de même beaucoup mieux ^^. Si tu pouvais me montrer un bout de code en XNA qui découpe l'image sa m'aiderait beaucoup (si tu ne fait pas de XNA, tant pis ^^').

    Encore merci pour ton aide.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    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 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    1) ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int delay = 200; // En ms
    int lastUpdate = 0;
    if ( gameTime > lastUpdate + delay )
    {
        // Faire ce que l'on veut (l'animation)
        lastUpdate = gameTime;
    }
    Voilà un exemple

    2) ->

    http://msdn.microsoft.com/en-us/libr...atch.draw.aspx
    Les version de Draw avec un "source rectangle" (le rectangle englobant la partie de la source que vous voulez affichée).
    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.

Discussions similaires

  1. Ecrire par programmation sur une feuille protégé !
    Par Freiya dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2007, 22h54
  2. Réponses: 1
    Dernier message: 18/11/2006, 15h06
  3. Réponses: 2
    Dernier message: 03/11/2006, 10h34
  4. Réponses: 2
    Dernier message: 08/08/2006, 09h41
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24

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