|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
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: |
|
|
00
|
|
|
#2 |
![]() ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
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?
|
|
|
00
|
|
|
#4 |
![]() ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
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! |
|
|
00
|
|
|
#6 |
![]() ![]() |
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? |
|
|
00
|
|
|
#7 |
![]() ![]() |
Ceci pourrait peut être aussi t'inspirer http://www.developpez.net/forums/d37...eme-scrolling/
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
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. |
|
|
00
|
|
|
#9 |
![]() ![]() |
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 |
|
|
00
|
|
|
#10 | ||
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#11 |
![]() ![]() |
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 |
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Inscription : janvier 2011 Messages : 189 ![]() |
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? |
|
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
Citation:
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 |
|
|
|
10
|
|
|
#14 |
![]() ![]() |
Mat.M t'as exactement donné les bonnes pistes
|
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 445 ![]() |
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 |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() donald aristide ################Étudiant Inscription : janvier 2012 Messages : 28 ![]() |
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. |
|
|
00
|
|
|
#17 |
|
Futur Membre du Club
![]() donald aristide ################Étudiant Inscription : janvier 2012 Messages : 28 ![]() |
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. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com