Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 17 sur 17
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut Déplacer les obstacles dans un jeu en 2D

    Salut à tous!
    Voila je dois faire un mario en 2D. J'ai récupéré les sprites et j'ai réussi à faire avancer le décor (l'image de fond) selon les déplacements de Mario. Mon problème, c'est comment faire avancer les obstacles du niveau. C'est-à-dire, je voudrais que avoir un fond uni (en bleu comme le ciel) et selon les mouvements de Mario, que les nuages, les tubes, les caisses apparaissent au fur et à mesure. Donc tout doit être enregistré à l'avance. Genre à telle abcisse et à telle ordonnée, il doit avoir tel sprite (un nuage par exemple).
    Je ne veux pas de code, juste la technique et ce que je dois utiliser (tableau, structure,...).
    Si ce que je veux faire n'est pas possible, j'aimerais avoir une autre méthode svp.

    PS: Ça doit ressembler aux Mario sur NES de ce genre:

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Pourquoi ne pas utiliser plusieurs tableau 2D ou chaque case serait un "bouts" de sprite (ou un petit sprite) complet de 16x16 ou 24x24 ou 32x32.

    Avec une liste de sprites/tuiles disponible qlq part qui contiendrait tout les petits carré de graphique.

    Ensuite, Chaque tableau sera une couche graphique qui servira a retenir quelle "tuile" de dessin il faut placer a tel endroit. (si pas remplis alors rien a dessiner)

    Tu px donc faire une couche "fond avec nuage", une couche "arbre et barrieres" qui seront des couches decors (donc pas de collision avec le joueur).

    Ensuite tu rajoute une couche pour "le plancher et les tuyau" bref la ou le bonhomme px aller. (Dessus il faudra gerer les collision evidement en fct de si le tableau contient ou non une reference vers une tuile donc obstacle).

    Apres pour l'affichage, tu t'arrange pour savoir tu te trouve en X (X etant l'axe gauche droite ou mario se promene), et tu parcours les != couches pour afficher les eventuelles tuiles. (Pour avoir un scrolling).

    Apres tu px eventuelement utiliser/mixer un autre systeme de gestion de "couche" ou les element sont dans une liste avec un position x,y pour ne plus rester "caller" dans la grille de 16x16 (par exemple pour les ennemis ou d'autres truc mobile qui se promene plus "fluidement").

    Enfin c'est une première idée simpliste qui vaut ce qu'elle vaut.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut

    Tu veux dire un tableau de surfaces? Donc j'initialise le tout à 0 sauf les cases où il doit avoir des sprites c'est ça?

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Par exemple oui, tu mes des chiffres qui identifie le sprite dans le tableau.
    Et au moment de dessiner, tu regardes l'identifiant, tu cherches après le sprite et tu l'affiche au bon endroit.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut

    Oui mais pour afficher le sprite je dois d'abord le blitter dans une surface puis blitter cette surface à l'écran. Donc un tableau de surfaces, ça marche mais donc pour les ennemis qui bougent je peux alors loader leurs différents sprites dans des surfaces différentes (mais contiguës).
    Est-ce que cette méthode peut marcher? J'ai peur que ça prenne du temps à charger tout ça!

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Pq tu blitte pas tes sprite directement sur l'ecran ? Ca te sert a quoi de blitter qlq part pour reblitter ailleurs ?

    Ensuite il faut charger tout tes différents sprites quelques part au debut du programme (apres ca ne prendras plus de temps pour chargé ?! j'ai pas compris). Il y'a plusieur methodes pour faire cela: blitting de tout tout le temps, ou blitting dans des grosses surface (plus facile a faire et rapide, mais demande bcp de mémoire).

    Dans mon cas je donne la méthode ou tu blitte tout tout le temps. (tu px mixer les 2)

    Pour les ennemis qui bougent j'ai pas bien compris ce que tu disais. Mais pour moi les ennemis doivent se deplacer dans l'espace mais pas de case en case.

    Donc pour resumer, tu as un ou plusieurs tableau pour le decor et le "plateau de jeu". Tu dois aussi avoir une position de ton bonhomme dans le monde (qui va te permettre de savoir quel morceau du tableau tu dois afficher sur ton ecran pour que le decor bouge).
    De la tu px deja normalement afficher le decor facilement avec 2 boucle sur le tableau qui blitte les bout de sprites. (et une 3 eme boucle si plusieur calques?).

    Ensuite tu as ta list d'ennemy, chaque ennemy a une reference vers un sprite, et un position dans le monde.
    L'affiche, tu parcours la boucle, tu regarde si le monstres est "vu par la camera" et tu l'affiche le cas echeant au bonne endroit (faudra surement faire qlq petits calculs).

    Non?

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Ceci pourrait peut être aussi t'inspirer http://www.developpez.net/forums/d37...eme-scrolling/

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut

    J'ai pas tout compris mais je résume:
    -Je crée un tableau de quelle forme? C'est-à-dire vu que ce ne sont pas des surfaces qu'il contient mais des indices, c'est en gros un tableau de pixels c'est ça?
    -Pour les ennemis je crois que ce serait plus simple de faire une fonction qui s'occupe de gérer les mouvements de tous les ennemis. Donc s'ils apparaissent à l'écran, c'est la fonction d'affichage qui s'en occupe.

    La partie qui retient les positions sera alors énorme!! Mais je crois que c'est le seul moyen.

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Bah un tableau a généralement un forme carré ou rectangulaire ^^. Et la taille dépend de la taille du monde...

    Non ce n'est pas un tableau de pixel, c'est un tableau qui va te servir a aller chercher quel tas de pixel tu vas devoir utiliser. (dans ta bibliotheque de sprite que tu auras au prealable chargé qlq part). Imagine une biesse labyrinth avec des 0 et 1, 0 etant un mur et 1 un bout d'herbe ... chaque petit case du tableau fera la taille de la grille (taille d'un sprite 16x16 24x24 ou 32x32 ou autres)...

    Oui si tu as 1000000 d'ennemis ca va etre chaud mais sinon ca ira.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut

    Citation Envoyé par wax78 Voir le message
    Bah un tableau a généralement un forme carré ou rectangulaire ^^. Et la taille dépend de la taille du monde...
    Ok je comprends.

    Citation Envoyé par wax78 Voir le message
    Non ce n'est pas un tableau de pixel, c'est un tableau qui va te servir a aller chercher quel tas de pixel tu vas devoir utiliser. (dans ta bibliotheque de sprite que tu auras au prealable chargé qlq part). Imagine une biesse labyrinth avec des 0 et 1, 0 etant un mur et 1 un bout d'herbe ... chaque petit case du tableau fera la taille de la grille (taille d'un sprite 16x16 24x24 ou 32x32 ou autres)...
    Là je ne comprends pas...

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Un exemple (sans image)
    http://www.dxstudio.com/guide_conten...4-6645b782a9ed

    Mais en cherchant un peu apres du tile mapping ou autres tu trouveras j'ai la flemme de te le trouver.

    http://oos.moxiecode.com/#Tutorials (en flash, mais c'est pour le principe)

    et encore mieux je crois http://www.tonypa.pri.ee/tbw/start.html

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : janvier 2011
    Messages : 202
    Points : 122
    Points
    122

    Par défaut

    Bon voici alors ce que je compte faire:
    -Je déclare une surface très très large où chaque sprite a ses coordonnées fixes, sauf les ennemis bien sûr dont les déplacements seront gérés par une fonction.
    -Je loade des zones cette surface à l'écran selon les déplacements du joueur.

    Donc en gros, je le fais avec un "tableaux de coordonnées" (à deux dimensions donc). Avant d'afficher chaque point à l'écran, je parcours le tableau en entier jusqu'à ce que je trouve un élément du tableau contenant les mêmes coordonnées, sinon j'affiche le ciel.

    Est-ce que c'est ce que tu voulais dire? Ou alors est-ce que c'est un bon plan?

  13. #13
    Expert Confirmé Sénior
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    4 881
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 4 881
    Points : 6 898
    Points
    6 898

    Par défaut

    Citation Envoyé par dré kam Voir le message
    Bon voici alors ce que je compte faire:
    -Je déclare une surface très très large où chaque sprite a ses coordonnées fixes, sauf les ennemis bien sûr dont les déplacements seront gérés par une fonction.
    -Je loade des zones cette surface à l'écran selon les déplacements du joueur.

    non il faut déclarer une SDL_Surface correspondant à l'écran.
    Ensuite il faut charger tous les éléments du décor dans des SDL_Surface correspondantes; par exemple si tu as un mur de 200 pixels sur 50 pixels alors il faut créer une SDL_Surface correspondante.
    Puis il faut faire un "blit" de tous ces éléments.
    Mais avec une particularité comme j'ai écris précédemment c'est qu'il faut utiliser la méthode du "clipping" pour afficher les objets si tu veux faire un défilement.
    Pour le projet que tu souhaites réaliser il est quasi obligatoire de créer un éditeur de niveau à part qui te permette de placer les éléments du décor à l'écran et de les enregistrer dans un fichier de données par la suite...

    ou bien alors tu peux regrouper tous les éléments du décor sur une même image et procéder à un découpage par exemple un mur sera de coordonnées ( 0,0 ) x ( 100, 20) et un autre ( 0,30)x ( 100,20)
    Il faudra faire un éditeur de motifs ( ou patterns en anglais) qui ter permettra d'enregistrer dans des structures tous ces motifs vers un fichier de données

  14. #14
    Modérateur
    Avatar de wax78
    Homme Profil pro Renaud Warnotte
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    2 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Renaud Warnotte
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 2 628
    Points : 4 952
    Points
    4 952

    Par défaut

    Mat.M t'as exactement donné les bonnes pistes

  15. #15
    Expert Confirmé Sénior
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    4 881
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 4 881
    Points : 6 898
    Points
    6 898

    Par défaut

    Merci Renaud

    une petite précision une image qui regroupe des élément de décor et de sprites ça s'appelle un tileset en anglais ; rechercher dans google tileset

  16. #16
    Futur Membre du Club
    Homme Profil pro donald aristide ################
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Nom : Homme donald aristide ################
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 29
    Points : 18
    Points
    18

    Par défaut

    Bonjour,
    Je suis actuellement sur un projet qui consiste à la création,de mario sokoban en 2D.
    J'ai commencé l'étude de sdl.Je sais afficher l'écran,Déplacer un sprite.
    Au niveau de la création du mario.
    -Je n arrive pas à créer le decor.

  17. #17
    Futur Membre du Club
    Homme Profil pro donald aristide ################
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Nom : Homme donald aristide ################
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 29
    Points : 18
    Points
    18

    Par défaut

    Bonjour,
    Je suis actuellement sur un projet qui consiste à la création,de mario sokoban en 2D.
    J'ai commencé l'étude de sdl.Je sais afficher l'écran,Déplacer un sprite.
    Au niveau de la création du mario.
    -Je n arrive pas à créer le decor.
    *Je sais qu'il faut utiliser une matrice tab[][]
    *l utilisation d'une enumeration.
    -L on me demande aussi de créer un éditeur de niveau.
    Je ne sais pas comment m y prendre voila pourquoi je me m adresse à vous.
    Merci de m aider si vous le pouvez.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •