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

Projets Discussion :

Avis sur un jeu de plateforme


Sujet :

Projets

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Avis sur un jeu de plateforme
    Bonjour à tous ,

    Je suis fan de programmation et depuis peu je m'interresse de plus en plus à la programmation de jeux 2D , pour la 3D on verra plus tard.

    Pour ça j'apprend actuellement le C++ et la SDL même si apparrement il est conseillé d'apprendre la SFML qui est une bibliothéque orientée objet.

    bref au départ j'ai commencé par un Snake avec l'aide de quelqu'un et maintenant je travaille sur un jeu de plateforme genre Mario , je sais ce n'est pas facile pour un débutant.
    J'ai une personne actuellement qui m'aide pour le graphisme , quand à la partie programmation je suis seul.

    Voici une démo du jeu que j'ai commencé ,
    je voudrai votre avis sur la maniabilité du jeu , le saut , les bugs bref sur tout quoi

    et si des personnes veulent me rejoindre dans ce projet pas de problème.
    voici le lien :

    http://aubyrca.franceserv.com/Projet_nasa.zip

    Pour info :

    Déplacement du personnage (Touche directionnelle) , flèche du haut pour sauter.
    Touche F pour lancer des armes et S pour changer d'armes détail pas vraiment important pour l'instant

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Bah je me demande pourquoi il y a deux exécutables, un pour la fenêtre et l'autre pour le fullscreen...
    Sachant que tu aurais pu faire que la touche F1 bascule entre les deux, surtout que niveau code ça prend que quelques lignes

    Alors le jeu, je dirais que pour quelqu'un qui débute c'est pas mal , même s'il y a de gros soucis de jouabilité, pour les collisions, elles sont très étranges et quand on meurt il y a un bug quelques fois vu qu'on apparait tous de suite en haut et donc on meurt rapidement vu qu'on s'attend à la fenêtre de vie.
    Donc c'est bien, continu, en espérant que le code est 'correct' sinon tu ne pourra pas progresser =P

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Les 2 versions je mets juste une des 2 lignes en commentaire avant de compiler car au final je ne ferai qu'une version mais je sais pas laquelle encore

    Quand tu viens de la haut ce n'est pas un bug c'est juste que le personnage deviens plus petit donc tu ne perd pas de vie un peu comme dans mario.

    Peux-tu m'en dire plus sur la jouabilité et les collisions s'il te plait ?

    Pour la partie code j'essaie de faire au mieux et quelque chose de propre même si je suis sur qu'il y a des choses à dire.

    Par exemple pour les personnages :

    J'ai créé une classe Personnage, ensuite tous les autres personnages (héros et ennemis) héritent de cette classe, j'utilise le même principe pour les collisions.

    Ensuite j'ai créé deux classes de type Singleton celle qui gère la scène et celle qui gère les images de manière à ne charger les images qu'une seule fois.

    Je ne suis pas rentré dans le détail mais bon voilà l'idée.

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par redrad Voir le message
    Peux-tu m'en dire plus sur la jouabilité et les collisions stp ?.
    Niveau code ou ton jeu ?
    Je réponds au deux dans ton jeu, je pense que tu vois le problème de collision, dès qu'on le touche on redescend tout de suite et même sur les cotés (ou alors on descend lentement) et donc ça joue sur la jouabilité du jeu vu que dans un jeu de plateforme les collisions c'est important (surtout pour les passages délicats).
    Sinon je viens de remarquer mais dans ce genre de jeu tu ne peux pas revenir en arrière
    Après je trouve que le perso saute trop haut après avoir écrasé un ennemi mais c'est pas très grave.

    Pour coder correctement une collision, il faut que tu créer des variables vecteur et que ton système de collision, c'est dur d'expliquer par quelques mots, mais normalement grâce à la position du perso, de son vecteur et de la collision, tu sais d'où viendra (dans le sens de la direction) la collision, donc de coder en conséquence.

    Citation Envoyé par redrad Voir le message
    J'ai créé une Class Personnage , ensuite tous les autres personnages (héros et ennemis)héritent de cette Class , j'utilise le même principe pour les collisions.

    Ensuite j'ai créé 2 Class de type Singleton celle qui gére la scéne et celle qui gére les images de manière à ne charger les images qu'une seule fois.

    Je ne suis pas rentré dans le détail mais bon voilà l'idée.
    On va dire que du moment que tu peux modifier le jeu sans trop de souci c'est le principal et ça m'a l'air bien si tu ne charge pas plus d'une fois les image

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Pour les collisions j'utilise le système des boites englobantes AABB donc je tiens compte de la direction du personnage (classe vecteur) en gros quand le personnage se dirige vers la droite si x + perso.width et compris dans la boite englobante de l'ennemi il y a collision et quand il va vers la gauche je teste que x. Même principe pour y bien sur.

    Sachant qu'il y a la collision par le haut pour tuer le personnage.

    Pour la hauteur je trouve aussi qu'il saute haut c'est juste une variable à changer

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    oh ok donc ton code de collision est à revoir vu qu'il a quelques problèmes ^^'
    Par exemple moi pour mon jeu de plateforme il y a une différence ici

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Pas mal ton jeu

    voici mon code pour la collision

    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
    26
    27
    28
    29
     
    int CollisionManager:: collision_pers_Ennemi (Personnage *heros , Personnage *ennemi)
    {
        /*Coordonnée du heros*/
        int x_min_heros = heros->getX() ;
        int x_max_heros = heros->getX() + heros->getWidth()    ;
        int y_min_heros = heros->getY() ;
        int y_max_heros = heros->getY() + heros->getHeight()   ;
     
        /*Coordonnée de l'ennemi*/
        int x_min_ennemi = ennemi->getX() ;
        int x_max_ennemi = ennemi->getX() + ennemi->getWidth()  ;
        int y_min_ennemi = ennemi->getY() ;
        int y_max_ennemi = ennemi->getY() + ennemi->getHeight() ;
     
     
     
        /*Aucune collision*/
        if ((x_max_heros < x_min_ennemi) || (x_min_heros > x_max_ennemi)
            || (y_max_heros < y_min_ennemi) || (y_min_heros > y_max_ennemi)  )
            return NUL ;
        /*Collision par le haut*/
        else if (y_max_heros < y_min_ennemi + MAX_GRAVITE )
            return GAGNE ;
        /*Autres collision que par le haut*/
        else
            return PERDU ;
     
    }

  8. #8
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    je parlais surtout des collisions pas entre perso et ennemi , mais entre le perso et les 'murs' si tu préfères.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 184
    Points : 319
    Points
    319
    Par défaut
    C'est pas mal du tout pour un premier essai.

    Concernant les collisions, il faut que tu affine ton calcul si jamais tu détecte une collision.
    En gros tu conserve ton système actuel auquel tu ajoutes un nouvelle méthode qui te permettra de calculer si il y a collision au pixel près.
    Donc au lieu d'avoir : x_max_heros = heros->getX() + heros->getWidth()
    Tu auras : x_max_heros = heros->getX() + 1
    Et tu fait une boucle pour augmenter la valeur jusqu'à trouver la "vraie" collision.

    Je ne sais pas si je suis bien clair mais cette méthode te permettra de mieux gérer tes collisions.

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Merci oui j'ai très bien compris ce que tu veux dire je vais voir ça

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    J'ai testé. Il est bizarre que le jeu ne semble pas fluide en fait. Je ne sais pas comment l'expliquer, mais on a l'impression que cela rame ... bizarrement.

    Le fait que le soit couper lorsque l'on touche une boite est gênant pour récupérer les bonus (je pense que c'est ce que voulez dire Kannagi )

    D'après mon "gestionnaire de taches", il semble qu'il y ai une fuite de mémoire

    Pour les champignons qui font rebondir, il est dommage que l'on ne peut pas passer en marchant tout simplement (donc, il nous bloque).

    J'ai récupéré un tas d'objets, mais je ne sais pas à quoi ils servent

    Je trouve que le saut automatique (et aussi haut) après avoir sauté sur un ennemi est dommage.

    Lorsque l'on perd une vie on recommence au début. Sachant que l'on peut gagner une vie durant le niveau, c'est un peu ... inutile
    Le fait de réapparaitre en haut après avoir perdu un niveau est dommage (pertubant)

    J'ai remarqué que si on n'explose pas la première box, la seconde donne la boule, tout de même. Et la troisième un coeur du coup. Donc, du coup, j'imagine que l'objet contenu dans la box, n'est pas lié à la box. Ce n'est pas vraiment habituel ... et même légèrement illogique.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    bonjour est tout d'abord merci d'avoir passer un peu de temps

    Pour la fluidité peut-être que le Fps est trop élevé (50 FPS)

    Pour la fuite mémoire je t'avouerai que je ne sais pas encore d'où cela peut venir , je chercherai plus tard.

    Le fait que le soit couper lorsque l'on touche une boite est gênant pour récupérer les bonus (je pense que c'est ce que voulez dire Kannagi )
    Que veux-tu dire exactement ?

    Pour les champignons qui font rebondir, il est dommage que l'on ne peut pas passer en marchant tout simplement (donc, il nous bloque).
    Juste une propriété à changer dans un fichier texte

    J'ai récupéré un tas d'objets, mais je ne sais pas à quoi ils servent
    La boule violette normalement fait grandir le personnage ça se voit pas trop mais je t'assure il est plus grand.

    Le coeur fait gagner une vie

    et le reste ce n'est que des armes (boule de feu , couteau , rocket)

    Je trouve que le saut automatique (et aussi haut) après avoir sauté sur un ennemi est dommage.
    Je trouve aussi , je vais changer ça c'est juste une variable

    Le fait de réapparaitre en haut après avoir perdu un niveau est dommage (pertubant)
    En fait tu ne perds pas de vie mais tu reprends ta taille normale. Je vais changer cette animation et rendre le héros invincible pendant 5 secondes comme dans Mario

    J'ai remarqué que si on n'explose pas la première box, la seconde donne la boule, tout de même. Et la troisième un coeur du coup. Donc, du coup, j'imagine que l'objet contenu dans la box, n'est pas lié à la box. Ce n'est pas vraiment habituel ... et même légèrement illogique.
    En fait j'ai une Class Bonus ensuite la Class Coeur , Boule_de_Feu , Transformation etc ... hérite de cette Class
    chacune de ces Class à une méthode Action.

    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
     
    void Bonus_Missile :: action (Personnage *p)
     
    {
     
      p->ajouterArme(MISSILE , GAIN_ARME) ; /*Ajout de 5 missiles*/
     
    }
     
    void Coeur :: action (Personnage *p)
     
    {
     
      p->ajoutevie () ;
     
    }
     
    //etc ...
    Ensuite je gére un sac de bonus qui à chaque fois que je récupére un bonus il passe au suivant donc en fait le bonus n'est pas lié à la brique voilà c'est une logique comme une autre

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Que veux-tu dire exactement ?
    Simplement, que lorsque on saute et que l'on se colle sur le coté d'une boite, le saut est coupé ... et donc on retombe.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    En effet mais je ne sais pas quoi faire que devrait faire le personnage selon toi?

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Pour corriger, je pense qu'une technique utilisant un vecteur de vitesse est une bonne solution (je crois que c'est ce que Kannagi a essayé d'expliquer ).
    Je m'explique.
    Votre personnage, selon les touches appuyées aura un vecteur vitesse qui change. Par exemple, si on appuie sur la flèche gauche le vecteur sera :
    (-1, 0)
    Pour un saut, il est généralement de
    (0,1)
    , et si le joueur appuie en même temps sur une touche de direction, comme la flèche gauche, cela sera
    (-1,1)
    Maintenant, lorsque vous détectez une collision, par exemple, une boite est sur la gauche, votre vecteur vitesse deviendra immédiatement
    (0,1)
    (toujours pendant le saut) faisant que votre saut ne sera pas coupé.

    Bien sur, la valeur n'est pas obligatoirement de 1. Si vous voulez faire un saut plus rapide (et surement plus haut) votre vecteur sera un truc plus
    (0,5)
    . Les nombres à virgules sont aussi acceptés.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    voilà comment je gére mon saut

    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
     
    #define GRAVITE 1.4
    #define MAX_GRAVITE 15
     
     
         /*le joueur chute toujours vitesse sur l'axe des Y*/
         m_v_y += GRAVITE ;
     
         /*Limitation de la vitesse de chute*/
          if (m_v_y >= MAX_GRAVITE)
              m_v_y = MAX_GRAVITE ;
     
     
          /*Saut du joueur*/
          if (in->getEtatKey(SDLK_UP) and sol)
          {
              m_v_y = SAUT ; /*Hauteur de saut défini dans le defs.h*/
              m_direction = HAUT       ;
              sol = false ;  /*Le joueur est dans le vide*/
     
          }
    et en cas de collision je fais ça pour donner un effet de dérapage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /*met à jour la variable m_v_y*/
    p->setVitesseY(MAX_GRAVITE / 3) ; /*vitesse de la chute*/
    Je pense que ça vient de là , je ferai le test pour confirmer ça

  17. #17
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Up

    J'ai essayé d'améliorer les points soulevés


    http://aubyrca.franceserv.com/Projet_nasa.zip

    J'attends vos critiques

    Merci d'avance

  18. #18
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Toujours la fuite de mémoire (et elle est assez horrible).
    Sinon, il y a peut être un problème de collision avec l'ennemi (sur on arrive par en haut à droite).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  19. #19
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Pour la collision je pense savoir d'où vient le problème ,
    mais pour la fuite mémoire je ne sais pas car je charge mes images qu'une seule fois de plus qu'en je joue chez moi le processus est occupé à 20% ce qui n'est pas énorme je pense

  20. #20
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    un petit Up ,

    J'ai ajouté du son et un gros monstre à la fin (dont je dois revoir la collision)

    http://aubyrca.franceserv.com/Projet_nasa.zip


    Merci d'avance.

Discussions similaires

  1. [Projet en cours] Quizrama: Avis sur un jeu de Quiz
    Par Oberown dans le forum Projets
    Réponses: 12
    Dernier message: 01/03/2016, 10h36
  2. [Android] LE PROJET LYNKA : votre avis sur ce jeu d'aventure?
    Par 90sAdventure dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 07/07/2012, 13h27
  3. Avis sur un jeu de plateforme
    Par redrad dans le forum Mon programme
    Réponses: 1
    Dernier message: 08/04/2012, 07h54
  4. [FLASH 8] Aide et avis sur un jeu de f1
    Par otagun dans le forum Flash
    Réponses: 4
    Dernier message: 30/10/2006, 11h35

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