Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SDL
SDL Forum d'entraide sur l'API SDL. Avant de poster -> FAQ SDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 11h07   #1
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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:
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h13   #2
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
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.
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 09h47   #3
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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?
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 09h55   #4
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
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.
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h11   #5
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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!
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h21   #6
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
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?
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h26   #7
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
Ceci pourrait peut être aussi t'inspirer http://www.developpez.net/forums/d37...eme-scrolling/
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h49   #8
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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.
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h52   #9
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
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.
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h01   #10
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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...
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h24   #11
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
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
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 10h42   #12
dré kam
Membre habitué
 
Homme
Inscription : janvier 2011
Messages : 189
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2011
Messages : 189
Points : 106
Points : 106
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?
dré kam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 00h00   #13
Mat.M
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 445
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 445
Points : 5 864
Points : 5 864
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
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/08/2011, 09h50   #14
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 133
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : août 2006
Messages : 2 133
Points : 4 076
Points : 4 076
Envoyer un message via MSN à wax78
Mat.M t'as exactement donné les bonnes pistes
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 17h50   #15
Mat.M
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 445
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 445
Points : 5 864
Points : 5 864
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
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 12h28   #16
aristide2012
Futur Membre du Club
 
Homme donald aristide ################
Étudiant
Inscription : janvier 2012
Messages : 28
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 : 28
Points : 19
Points : 19
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.
aristide2012 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 12h32   #17
aristide2012
Futur Membre du Club
 
Homme donald aristide ################
Étudiant
Inscription : janvier 2012
Messages : 28
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 : 28
Points : 19
Points : 19
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.
aristide2012 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h41.


 
 
 
 
Partenaires

Hébergement Web