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

SDL Discussion :

Déplacer les obstacles dans un jeu en 2D


Sujet :

SDL

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    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.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    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.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    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?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ceci pourrait peut être aussi t'inspirer http://www.developpez.net/forums/d37...eme-scrolling/
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    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.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    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
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Points : 163
    Points
    163
    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 éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 : 8 361
    Points : 20 381
    Points
    20 381
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Mat.M t'as exactement donné les bonnes pistes
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 : 8 361
    Points : 20 381
    Points
    20 381
    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
    Membre du Club

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 35
    Points : 45
    Points
    45
    Billets dans le blog
    1
    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
    Membre du Club

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 35
    Points : 45
    Points
    45
    Billets dans le blog
    1
    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.

Discussions similaires

  1. [Graphics View] Éditeur Ladder - déplacer les éléments dans une pseudo-grille
    Par Rodrigue dans le forum Qt
    Réponses: 0
    Dernier message: 06/07/2011, 10h46
  2. Déplacer les pages dans /WEB-INF/
    Par JeReMsS69 dans le forum JSF
    Réponses: 13
    Dernier message: 27/03/2009, 09h33
  3. Réponses: 2
    Dernier message: 29/05/2008, 10h53
  4. Déplacer les contrôles dans une fenêtre.
    Par SuperWeight dans le forum Windows
    Réponses: 1
    Dernier message: 13/04/2007, 10h15

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