Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire sauter un personnage sous java

    6 février 2016 à 14:27:00

    Bonjour à tous,

    Pour la fin de l'année je dois créer en duo un programme sous Processing dont le sujet est libre. Avec ma partenaire nous avons choisis de faire un jeu de plateforme "scientifique" avec des items à attraper, des ennemis, etc, etc,...

    Nous sommes bloquées depuis quelques temps maintenant sur la fonctionnalité qui permettrait à notre personnage de rester sur les plateformes (directement dessiné par nous même dans notre image de fond donc pas de fonction rect ou quoi que se soit) qui ont une couleur blanc/bleu/gris (voici la photo de notre fond). Nous avons appris en cours à empêcher un personnage de traverser les parois noirs dans un labyrinthe avec ces lignes de programmation :

    void bougerNarutoRun() {
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == UP) { 
    
            if (red(get(x, y-1))==0) {
    
              y=y;
    
            } else {
    
              y = y-1;
    
            }
    
          }
    
        }
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == LEFT) { 
    
            if (red(get(x-1, y))==0) {
    
              x=x;
    
            } else {
    
              x = x-1;
    
            }
    
          }
    
        }
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == RIGHT) { 
    
            if (red(get(x+41, y))==0) {
    
              x=x;
    
            } else {
    
              x = x+1;
    
            }
    
          }
    
        }
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == DOWN) { 
    
            if (red(get(x, y+41))==0) {
    
              y=y;
    
            } else {
    
              y = y+1;
    
            }
    
          }
    
        }
    
      }
    
    }



    Mais a partir de la, même en changeant la valeur de red pour notre programme notre personnage passe toujours au travers des plateformes et donc tombe lorsque l'on lance le jeu (car nous avons mis en place la gravité pour les sauts) Voici notre programme pour l'instant (je ne mets que les déplacements, je mettrais le reste du programme si besoin) :

    void bougerPerso1 ()
    
    {
    
      y=y+v;
    
      v=v+g;
    
      if (y < height) {
    
     
    
        v = v + g;
    
      } else {
    
     
    
        v = 0;
    
      }
    
      if (y > height) {
    
     
    
        y = height;
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == UP) { 
    
            if (red(get(x, y-5))==116 ) {
    
              y=y-1;
    
              noFill();
    
            } else {
    
              y = y;
    
            }
    
          }
    
        }
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == LEFT) { 
    
            if (red(get(x+22, y))==116) {
    
              x=x;
    
            } else {
    
              x = x-5;
    
            }
    
          }
    
        }
    
      }
    
      if (keyPressed) {
    
        if (key == CODED) {
    
          if (keyCode == RIGHT) { 
    
            if (red(get(x+80, y))==116) {
    
              x=x;
    
            } else {
    
              x = x+5;
    
            }
    
          }
    
        }
    
      }
    
    }



    Merci d'avance pour votre aide ! On doit rendre un programme du niveau 1 fonctionnel pour Lundi et ce point la nous pose beaucoup de problème

    -
    Edité par Vava0 8 février 2016 à 19:47:31

    • Partager sur Facebook
    • Partager sur Twitter
      7 février 2016 à 1:22:30

      Ce qui me dérange dans la lecture de ton code, c'est de voir qu'il y a des constantes comme 46, 80, 22 ou 116 écrit en dure dans le code. Si tu observes bien les cours de collision il ne devrait pas y avoir.
      • Partager sur Facebook
      • Partager sur Twitter
      Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
        7 février 2016 à 11:01:29

        Ah bon ? J'ai appliqué bêtement les fonctions que notre professeur nous a apprit donc je ne savais pas qu'il ne fallait pas qu'il y ai de constante... Par quoi dois-je les remplacer dans ce cas la ?
        • Partager sur Facebook
        • Partager sur Twitter
          7 février 2016 à 13:51:22

          Le problème c'est qu'on ne sait pas ce que ces constantes représentent. La hauteur, la largeur de ton nuage ? Imagine que tu viens à changer sa valeur, tu risques d'oublier d'en oublier quelques uns dans ton code et cela va te causer des bugs que tu ne comprendras pas (comme c'est le cas maintenant).

          Aussi tu demandes de l'aide sans nous dire ce que représente "red()" et "get()". 

          Enfin, mets à jour ton sujet pour placer tes codes dans un bloc de code (bouton "</>"), ce sera plus présentable, il y aura plus de gens pour t'aider. 

          • Partager sur Facebook
          • Partager sur Twitter
          Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
            7 février 2016 à 15:06:11

            Oui désolée pour la présentation, je viens de faire la modification.

            A vrai dire, je n'ai pas expliqué ce que red() et get() représentaient car très sincèrement je ne sais pas réellement à quoi ils servent... Je m'explique : Notre professeur nous a posé ces fonctions sans nous expliquer leurs utilités et je pensais -naïvement- que de ce fait ces deux fonctions fonctionnait toujours pour empêcher un personnage de passer à travers des pixel de couleurs mais à force de recherche je me suis rendu compte que ce n'étais pas si simple... Son code fonctionnait pour le labyrinthe car les murs étaient noirs, ici ils sont de couleurs.

            J'ai donc pensé à quelque chose mais je n'arrive pas à le mettre en place : déclarer des rectangle, un pour chaque plateforme, transparent qui me permettrait de faire un if et else en rapport avec ces rectangles. Le 1er rectangle ferait :

            rect(x,y,4,3) //avec x=40 et y=240

            Mais maintenant je ne sais pas comment faire en sorte que ce rectangle transparent permette à mon personnage de rester dessus...

            • Partager sur Facebook
            • Partager sur Twitter
              8 février 2016 à 0:15:38

              Tu ne peux pas seulement te baser sur un exemple du prof. Il faut que tu cherches à comprendre à quoi servent les méthodes red() et get() (déplacement ? collision ?), comment ils fonctionnent en interne (cf : les maths qu'il y a derrière). Si tu dois gérer les collisions regarde le tuto de Fvirtman sur ce site, il est très bien. 

              Note : Par rapport à ton code, tu peux factoriser la partie "if(keyPressed) { if(key == CODED) {".

              • Partager sur Facebook
              • Partager sur Twitter
              Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                8 février 2016 à 19:17:59

                Après quelques recherches personnelles j'ai enfin réglé mon problème, red() correspondait à la valeur de rouge qu'il me fallait pour faire la couleur que je voulais. J'ai finis par faire mes nuages entièrement blanc pour me facilité la tache et j'ai ajouté green() et blue() pour que le blanc fonctionne bien et maintenant ça fonctionne ! get() correspondait à la valeur ou je voulais que mon personnage s'arrête avant de toucher le pixel blanc je l'ai donc bien rétréci :) Maintenant les plateformes et mon personnage respecte bien les collisions il ne me reste plus qu'à le faire sauter en utilisant les équations de chute libre :)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 février 2016 à 19:55:17

                  Bon, j'ai beau chercher sur les cours de OpenClassrooms ou les sujets déjà crée, aucun ne répond à mon problème...

                  Je m'explique : Mon but est de faire sauter mon personnage de façon à ce qu'il puisse se déplacer de plateforme en plateforme. J'ai déjà commencé un bout de programmation seule que voici :

                   if (keyPressed) {
                      if (key == CODED) {
                        if (keyCode == UP) { 
                          if ((red(get(x,y))==255) && (green(get(x, y))==255) && (blue(get(x, y))==255)) {
                              y = y;
                              } else {
                              y=y-v0;//v0=10 , y=230
                     if (y > y+10) {
                     v0 = v0 + g; //g=1
                     } else if(y < height){
                     v0 = v0 - g;
                     }
                     }

                  Avec ça pour l'instant mon personnage redescend de lui même mais après cela lorsque j'appuie sur la flèche du haut de mon clavier il continue à descendre. De plus le saut est bien trop minime par apport à ce que j'aimerais faire mais pour l'instant je cherche surtout à le faire sauter correctement avant tout.

                  J'ai vue un cours sur les saut parabolique mécanique qui m'avait l'air très intéressant mais en C et je ne travaille que en Java ce qui m'empêche d'appliquer les formules de chutes paraboliques, que je connais puisque je suis en Terminal S.

                  Merci d'avance et merci Gugelhupf pour ton aide concernant mon précédent problème !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 février 2016 à 22:08:13

                    Bonsoir,

                    En fait, ce qu'il faut faire est plus simple.

                    Quand la touche UP est pressée, si ton personnage touche le sol, tu le fais décoller (vy = VITESSE_SAUT_INITIALE;).

                    Dans ta boucle principale (méthode draw ?), tu mets à jour tes coordonnées (y = y - vy;)

                    Puis, tu testes si ton perso a atterri. Si oui, tu annules la vitesse (vy = 0) sinon, tu mets à jour la vitesse (vy = vy + G).

                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 février 2016 à 21:25:57

                      Bonsoir,

                      Alors déjà merci beaucoup, ton explication m'a beaucoup aider, maintenant mon personnage monte de lui même et je peux même le faire aller vers la droite ce qui est énorme comparé à avant !

                      Mais, j'ai un problème (encore et toujours...). Mon personnage saute mais il n'atterrit plus. Il s'envole à l'infini sans jamais retombé ce qui est tout de même très problématique... Je pense que vy = 0 ou vy = vy + G doit être l'une des solutions à mon problème mais je ne sais pas où les placer...

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Faire sauter un personnage sous java

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown