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

Développement 2D, 3D et Jeux Discussion :

Les Sprites oui, mais comment?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Les Sprites oui, mais comment?
    Bonjour a tous,

    voila j'ai un projet avec un pote en cours d'info, on doit trouver une application pour un systeme expert (IA) et on a pensé faire un mini jeu. J'ai commencé a regardé les librairies Allegro et SDL qui fonctionnent tres bien mais j'ai une question qui reste sans reponse.
    J'ai suivi plusieurs tutos, ça marche nikel avec une animation et un fichier par sprite, mais je n arrive pas a comprendre comment utilisé un fichier regroupant X sprites (ex animation d un perso Street Fighter trouvé sur le web)... dois je le decoupé avec gimp? ou alors rentrer les coordonnées des differentes etapes a la main? je blok la dessus depui tout a l heure, je passe surement a coté de kkch...

    Merci de m avoir lu, desolé si ma kestion de debutant est debile, et merci d'avance a ceux ki me reponderont.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Cela dépend de la feuille de sprite, une feuille bien faite permet de calculer directement et facilement les coordonnées.

    Mais les deux solutions que tu donnes :

    Citation Envoyé par tametale
    dois je le decoupé avec gimp?
    ou alors rentrer les coordonnées des differentes etapes a la main?
    Son effectivement les deux grandes solutions lorsque le calcul n'est pas possible...

    Je préfére la 2ème généralement car je mets les coordonnées dans un 2ème fichier et cela réduit le nombre de fichier dans le projet.

    Jc

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Donc si je te suis, ou je decoupe le fichiers de sprites et j'en refait un autre en me debrouillant pour que chaque etape de l anime est la meme taille (longueur/largeur) et ke le centre soit le meme a chaque fois; ou alors je releve les coordonnées de chaque etape (comment stp?) et je les rentre a la main c'est ça?
    ca complike grandement les choses, j'imagine que ça fait klk bonnes heure de test pour avoir une simple animation fluide et sans decalage...
    Je vai essayer mais vu que ce n'est pas le fond de mon projet je croi que je vai essayer de me trouver kkch de plus simple...

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par tametale
    Donc si je te suis, ou je decoupe le fichiers de sprites et j'en refait un autre en me debrouillant pour que chaque etape de l anime est la meme taille (longueur/largeur) et ke le centre soit le meme a chaque fois; ou alors je releve les coordonnées de chaque etape (comment stp?)
    Avec un logiciel graphique genre gimp/paint


    et je les rentre a la main c'est ça?
    Dans un fichier texte, oui..

    ca complike grandement les choses, j'imagine que ça fait klk bonnes heure de test pour avoir une simple animation fluide et sans decalage...
    En gros oui, sûrement...

    Je vai essayer mais vu que ce n'est pas le fond de mon projet je croi que je vai essayer de me trouver kkch de plus simple...
    En principe, les feuilles de sprites ont des sprites de même taille donc le problème ne se pose pas...

    Par exemple :
    http://sprites.fireball20xl.com/NSA/Sheets/smwmario.gif

    Jc

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    coincidence parfaite je regardais cette feuille y a pas 30 secondes

    a priori ça a l air assez regulier ici en effet mais il y a kan meme des series (mario sur yoshi par exemple) qui sont de tailles assez variables, en plus la premiere image de chaque ligne ne commence pas non plus au meme endroit (pas aligné a gauche) ... dans un tuto, je sais plus lequel, il y avait un exemple avec une feuille de sprite parfaitement reguliere, meme taille pour chake etape de l animation, pas de marge ... et du coup tout etait grandement simplifié, on avai juste a incrementé des coordonnée de Xpixels dans une boucle while et c'etait parfait en 3secondes ...

    je viens de regarder cette feuille sous gimp et bien ke chaque sprite soit de la meme taille, leur enchainement horyzontal n est pas regulier, d ou mon probleme qui n'en est peut etre pas un et ki serai plus la norme d'apres ce ke ej croi cmprendre .... bref

    si t a plus de lumieres a apporté o pti debutant que je suis, je te remercie deja de tes premieres reponses.

  6. #6
    mat.M
    Invité(e)
    Par défaut
    ou alors rentrer les coordonnées des differentes etapes a la main?
    Non pas du tout : Un jeu =un éditeur !

    Il faut développer un éditeur qui te permette de placer les persos.

    Pour les planches , eh bien une planche=un perso ; sur la planche ily aura les positions successives du personnage.
    Tu peux t'inspirer des "tilesets" de Reiner :

    http://reinerstileset.4players.de/englisch.htm

    ( nota : Loulou24 l'a donné en référence )

  7. #7
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Peut-être que j'ai mal compris la question, mais en gros tu voudrais pouvoir afficher des images successives avec un sprite ? Si c'est ça, je peux peut-être t'aider (ça sera la première fois que je pourrais aider quelqu'un ^^). Sinon, j'aurais perdu 20 minutes.

    Donc dans mon livre que je suis en train de lire, ils parlent justement de ça. Ca utilise des classes donc je t'explique à partir de ça, mais tu pourras toujours modeler suivant ton implémentation.

    Déjà il faut que chaque "rectangle" de ton image ait la même dimension, sans espace. Comme ceci :



    Dans la classe Bitmap il y a deux fonctions : ObtenirLargeur() et ObtenirHauteur() mais qui renvoient la largeur et la hauteur TOTALE du bitmap. Donc dans la classe Sprite on fait quelques modifications. On ajoute déjà deux variables : une indiquant le nombre de frames et qui sera initialisé par défaut à 1 (mais il faudra évidemment le changer si tu as plus de frames), et une variable indiquant la frame en cours initialisé à 0. On créé aussi deux nouvelles fonctions à l'intérieur de cette classe Sprite, ObtenirHauteur() et ObtenirLargeur(). Ici on veut donc obtenir la largeur et la hauteur d'une seule frame. Donc pour la hauteur dans le livre ça ne change pas, donc ça renvoie tout simplement la hauteur du bitmap, par exemple m_bitmap->ObtenirHauteur(); Mais pour la largeur, on fait m_bitmap->ObtenirLargeur() / nombreFrames; Donc on obtiendra la largeur d'une seule frame.

    Puis ensuite, on dessine.

    if (nombreFrames == 1) // Donc que une seule frame
    BitBlt (hDC, x, y, ObtenirLargeur(), ObtenirHauteur(), hMemDC, 0, 0, SRCCOPY);

    else { // Donc si plusieurs frames
    int xPart = ObtenirLargeur() * frameCourante; // Donc ça nous obtiendra l'absisse x de la frame que l'on veut obtenir)
    BitBlt (hDC, x, y, ObtenirLargeur(), ObtenirHauteur(), hMemDC, xPart, 0, SRCCOPY);
    }

    voilà. Je sais pas si c'est ça que tu voulais, mais en tout cas, j'aurai essayé

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Plus simple, plus court et en SDL.

    En admettant un chipset de sprites comme celui présenté sur le post ci-dessus, tu peux faire un tableau de SDL_Rect et stocker toutes les coordonnées:
    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
     
    SDL_Surface * p_chipset = NULL;
    SDL_Rect * rect_tab = NULL;
    Uint32 i = 0;
     
     
    /* Allocation dynamique du tableau de SDL_Rect:
        Ca tout le monde doit savoir le faire donc je le montre pas */
    ... 
     
    /* Chargement du chipset: */
    p_surf = SDL_LoadBMP ("chipset.bmp");
     
    /* Calcul et stockage de toutes les coordonnées: */
    for (i = 0; i < 12; i++)
    {
       rect_tab[i].w = 40;  /* taille pour exemple hein ;) */
       rect_tab[i].h = 40;
       rect_tab[i].x = i * 40; /* A chaque tour de boucle on avance de 40 pixels pour passer au tile suivant. */
       rect_tab[i].y = 0;   /* Ici le chipset ne fait qu'une ligne donc qu'une boucle. */
    }
     
    /* Blit d'un tile du chipset, par exemple tiens, je veut le 5: */
    SDL_BlitSurface (p_chipset, & rect_tab[5], p_screen, & rect_position);
    ...

    Voilà, c'est court, c'est clair, c'est flexible, c'est la technique que j'utilise tout le temps

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    MErci les mecs ça fait plaisir d'avoir autant de reponse aussi vite ça va m aider pas mal dans mon projet je pense.
    Pour ce qui est des planches de sprite ou effectivement toutes les images ont la meme dimension j ai aucun probleme, ça marche tres bien, mais merci pour les precision en tout cas, c est vraiment quand les dimension varient que je galere ... Creer un editeur oué pourquoi pas mais la je part dans un truc inconnu qui m a l air bien tendu quand meme non ? surtout que ce ne n est que du bonus dans le projet que je dois rendre meme si ça parait tres interressant.
    Je vous explique clairement ma situation:
    J'ai un premier projet d intelligence artificielle, premier cours, ou on me demande de realiser un systeme expert, le minimum syndical etant une base de regle niveau 0, une base de fait un moteur d'inference avec chainage avant et chainage arriere. Vu qu on a pas de sujet (expertise) et qu on a envie de faire un truc sympa on a eut l idée d utiliser ça dans un pti jeu old school, le gros de notre note sera evaluer sur l' IA et pas sur le graphisme donc en gros je veux juste recuperer des anime sympa, qui en jette un peu, mais je peux pas me permettre d'y passer trop de temps, d autres projets et d'autres matieres a bosser malheureusement...
    Donc si y a moyen de recuperer un editeur pour manipuler les feuilles de sprites facilement ou encore un tuto qui nous ferai ça en pas-a-pas ce serai la meilleure solution pour nous.
    Sinon et parceque si j ai le temps j'essaierai peut etre de pousser un peu quand meme, comment on releve les coordonnées dans gimp ou autre?

    Merci

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par tametale
    comment on releve les coordonnées dans gimp ou autre?
    Bin dans Gimp, tu peux voir les coordonnées du pointeur de la souris dans le coin inférieur gauche de la fenêtre d'un document.

    Sinon, si dans un chipset de sprites, chaque sprite possède la même taille, inutile de connaître les dimenssions et positions car on peut les calculer comme je l'ai montré plus haut !

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup je vais regarder ça de plus pres, et pour les sprites de meme taille j avai piger t inkiete aucun probleme avec ça (je radotte nan ) ...

    sinon pour trouver un editeur tout fait avec des anims sympa ou un truc que je pourrai reutiliser kkun a une idée ou fo ke je comence a m y mettre en solo ?

    merci encore

  12. #12
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par tametale
    Creer un editeur oué pourquoi pas mais la je part dans un truc inconnu qui m a l air bien tendu quand meme non ? surtout que ce ne n est que du bonus dans le projet que je dois rendre meme si ça parait tres interressant.
    ?? C'est une quasi obligation d'en développer un sinon ça sera vraiment foutoir et tu risques de tourner vraiment en rond.
    Développer un jeu sans éditeur c'est totalement inconcevable sauf évidemment si tu crées un petit jeu d'arcade genre Tetris


    Puis ensuite, on dessine.

    if (nombreFrames == 1) // Donc que une seule frame
    BitBlt (hDC, x, y, ObtenirLargeur(), ObtenirHauteur(), hMemDC, 0, 0, SRCCOPY);

    else { // Donc si plusieurs frames
    int xPart = ObtenirLargeur() * frameCourante; // Donc ça nous obtiendra l'absisse x de la frame que l'on veut obtenir)
    BitBlt (hDC, x, y, ObtenirLargeur(), ObtenirHauteur(), hMemDC, xPart, 0, SRCCOPY);
    }
    Oui mais il vaut mieux prendre des valeurs constantes comme l'illustre prfaitement Franck.H.
    Faire ce genre d'opération au lancement du jeu.
    Donc créer un..... éditeur d'images cadres ("frames") pour stocker image par image.
    Sinon on peut effectivement initialiser avec une simple boucle

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    POur le moment ( je suis entrain d'y réfléchir ) je prévois de coder mes animation en 2D comme ceci :

    un fichier config qui récapitule :

    -le nom de l'animation
    -le type ( la pluspart des anim sont soit cyclique, soit s'éxécute en une passe )
    - les coordonées en X,Y de chaque frame de l'animation dans la texture globale

    ( en mutipliant X,Y pâr la taille de tes sprite, du retrouve tes coordonées ... )

    Enfin voila, aprés c'est beaucoup de boulot pour gérer les détails

  14. #14
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    effectivement je me rend compte de tous les ptis details c plutot compliké tout ça, meme si je vais me contenter du strict minimum pour illustrer mon projet, je vais pa me tapper un jeu entier, je comptais peut etre reprendre des sprites de street fighter que j ai trouvé et ne faire k un seul et unique combat, l'IA de l'adversaire serait alors l'application de mon projet. Mais c'est vrai que plus je couche la theorie sur papier plus je me rend compte des difficultés, car gerer les differentes reactions du perso est assez complexe, surtout si je veux laisser une chance au joueur humain, car je em suis vite rendu compte (toujours en theorie) que mes premieres "regles" ne permettai jamais au joueur de toucher l ordi sans qu il ne se protege (la lecture du fait J1FRAPPE amenant obligatoirement J2SEPROTEGE), il faut que je rajoute de l aleatoire dans ses reactions, ou alors peutetre un "temps de reaction" plus long .... pfffffiou ... en plus c assez dur de trouver des infos commme celle ci sur le web, trop specifike surement.

    merci en tout cas.

  15. #15
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Comme modèle pour la baston 2D il y a Mugen.

    Il n'est pas nécessaire que l'IA rate ses parades pour qu'on puisse la vaincre. Il suffit qu'elle attaque, qu'on parre et que l'on riposte assez vite... ce qui suppose que la parade ne soit pas instantannée. Les Street Fighters, KOF et autres ont une modélisation assez complexe de l'anchainement des animations (surtout laquelle a priorité sur laquelle).

    Il y a aussi la gestion parade haute/basse, la priorité des coups, les zones des sprites qui permettent effectivement de frapper... Donc pas mal d'éléments plus ou moins simples à implémenter qui permettent de rendre le jeu intéressant.

    Bon après une IA qui ratte quelques parades de temps à autre ne peut pas faire (trop) de mal.

  16. #16
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Je pense que le simple fait que l'ia attaque de temps en temps suffira pour ton problème de parade . De plus je te suggère de tenir compte de
    - l'anticipation d'un joueur face a son adversaire
    - du temps de réaction avant qu'un joueur ne voit un attaque ennemis, ne l'identifie et ne trouve la réaction ... effectivement si tu fait ca en 1 frame , tu aura un TRES net avantage sur tout joueur humain pour qui l'opération prendra XX milli sec .

  17. #17
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Je vois que ma reflexion a été beaucoup moins loin que celle de certain d entre vous merci pour toute ces infos ça m aide vraiment a avancer, et plus mes idées sont claires, mieux je me prepare pour ce projet, si j arrive a impressionner le prof ce sera un peu grace a vous.

    Merci encore.

Discussions similaires

  1. Débuter, oui, mais comment ?
    Par Idealik dans le forum Débuter
    Réponses: 17
    Dernier message: 13/02/2008, 00h43
  2. [Winsock] Un chat, oui, mais comment ?
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/02/2007, 04h09
  3. [Système] LA OOP, oui mais comment concrètement ?
    Par HALOMOTO dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2006, 17h43
  4. [Ajax] Super les drags drops mais comment sauvegarder ?
    Par killprog dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 04/05/2006, 17h09
  5. HomeDB, oui mais comment ?
    Par Gregouz dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/10/2004, 15h27

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