Partage
  • Partager sur Facebook
  • Partager sur Twitter

créér une visée de sniper

pour un jeu

    9 juin 2006 à 21:25:45

    Amis Zéros, Bonsoir :)

    Je me suis mis à la création d'un petit jeu, en reprenant les sprites de Mario Sokoban (pour commencer) Même si le jeu n'a rien avoir :lol: Pour l'instant le but est smiplement de tirer sur des balles qui rebondissent dans tous les sens... Rien de très original en soit, j'aurais voulu l'améliorer en ajoutant une visée genre tir de sniper (le petit trait rouge) .

    Et en fait je n'ai pensé à rien d'autre qu'à... une fonction... pas celle des programmes mais je comptais créé une visée en prenant dans mon cours de math la règle qui dit que toute droite est une fonction (ici de type Y = K.X + T)

    Et bah je n'arrive pas à le mettre en C, je ne vois pas la formule de base... Au début, comme le témoigne mon code ci-dessous, je définis la distance entre le héros et le pointeur de la souris, histoire de stopper la visée où il faut.

    //********** FONCTION AFFICHAGE DE LA VISEE********** \\

    void visee(event.motion.x, event.motion.y, SDL_Rect positionHeros)
    {
        /*Le terme fonction porte bien son nom car nous allons utilser la propriété
        qui nous dit que toute droite est une fonction. Voir votre cours de math chapitre des ... fonctions ;)*/


        // on prend la distance X entre la souris et le héros
        long distanceXSourisHeros = 0;
        // si la souris est à droite du héros
        if (event.motion.x >= positionHeros.x)
        distanceXSourisHeros = event.motion.x - positionHeros.x;
        // ou si elle est à gauche (ceci pour éviter tout nombre négatif)
        else
        distanceXSourisHeros = positionSouris.x - event.motion.x;
        // on calcule la hauteur de la visée à chaque pixel
        for(i=0;i<distanceXSourisHeros;i++)
        {
            // JE SAIS PAS QUOI METTRE rapport avec k.x + t normalement
        }

    }


    Sinon , j'avais aussi penser à résoudre ce problème avec les angles en définissant l'angle que fait la droite reliant le héros au pointeur et une droite horizontale mais allez savoir pourquoi j'ai trouvé çà trop compliqué ^^

    Merci d'avance à tous ceux qui pourront m'aiguillez, et si vous avez un autre moyen , je suis preneur, bonne soirée à vous :)

    EDIT : je précise que l'envoi de la fonction échoue, surement suite à event.motion.x et y , je savais pas comment les envoyer ;)
    • Partager sur Facebook
    • Partager sur Twitter
      9 juin 2006 à 21:42:15

      tu fait un jeu en 2D ou 3D ?
      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2006 à 21:46:39

        Tu risques d'être un peu embêté... D'après ce que dit m@teo, en dehors des surfaces qu'il est simple de créer, dessiner en SDL c'est un peu la galère... va falloir que tu dessine ta droite point par point... Cependant ton idée d'utiliser les fonctions mathématiques est bonne il me semble.
        NB : attention, le jour ou tu programmera en 3D, faudrait faire gaffe parce qu'une droite est défini par un système d'equation cartésienne de 2 plans ou par un système de 3 équations paramètriques... (programme de 1ère S, je sais pas en quelle classe tu es ^^ )
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2006 à 22:01:28

          sinon pour la 3D, cest simple : il suffit d'utiliser la librairie OpenGL, la il suffit de creer 2 point et OpenGL te trace la droite, par contre en 2D, là.... je sais pas
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2006 à 22:15:14

            Tu fais une image de 1 pixel de largeur qui sera répétée en largeur.
            Tu mets une hauteur que tu veux pour l'image et tu fais des petits points rouges dessus (qui, répétés, symboliseront la visée).
            void visee(SDL_event event, SDL_Rect positionHeros, SDL_Surface *ecran)
            {
                SDL_Surface *visee;
                SDL_Rect pos;
            // A adapter selon ton fichier image
                visee = SDL_LoadBMP("visee.bmp");
            // Ton code avant la boucle
                pos.y = positionHeros.y;
                for(i=0;i<distanceXSourisHeros;i++)
                {
                    // On augmente la position où afficher de i
                    pos.x = positionHeros.x + i;
                    SDL_BlitSurface(visee, NULL, ecran, &pos);
                }
                SDL_Flip(ecran);
            }

            Voilà ça devrait marcher mais la visee traversera la tete du heros.
            Si t vois pas comment régler ça, demandes.
            PS:
            Pour appeler la fonction:
            if(event.type == SDL_MOUSEMOTION)
                visee(event, positionHeros, ecran);
            • Partager sur Facebook
            • Partager sur Twitter
              9 juin 2006 à 22:41:47

              Tu m'escuse mais je ne vois pas comment ton code peut marchar, tu ne parles même pas de la position de la souris alors qu'elle est très importante : elle modifie entièrement l'angle compris entre la visée et le sol. Là tu vas juste tracer une ligne mais qui ne tiendra compte de rien non ? Dites-moi si je me trompe....
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2006 à 22:42:53

                Je crois que cet article de developpez.com peut t'intéresser ! ;)

                http://anomaly.developpez.com/tutoriel/sdl/partie2/
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2006 à 22:49:06

                  Citation : N1gHtm@r3

                  Tu 'escuse mais je ne vois pas comment ton cde peut archar, tu ne parles même pas de la position de la souris alors que'elle est très importante : elle modifie entièrement l'angle compris entre la visée et le sol. Là tu vas juste tracer une ligne mais qui ne tiendra compte de rien non ? Dites-moi si je me trompe....


                  Du calme :p
                  Là où j'ai mis // Ton code avant la boucle Faut remplacer par Ton code avant la boucle ! ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2006 à 22:55:31

                    Je capte rien :-° Tu veux faire une ligne comment ? Qui relie quoi ?

                    Sinon, perdu, il vaut mieux s'orienter vers les vecteurs pour ça (je retrouve plus mon code :p désolé... :euh: )
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 juin 2006 à 9:40:11

                      void visee(SDL_Event event, SDL_Rect positionHeros, SDL_Surface *ecran)
                      {
                          if(event.type == SDL_MOUSEMOTION)
                          {
                              SDL_Surface *visee;
                              SDL_Rect pos;
                      /* A adapter selon ton fichier image */
                              visee = SDL_LoadBMP("visee.bmp");
                              pos.y = positionHeros.y;
                              if(positionHeros.x < event.motion.x)
                              {
                                  for(pos.x=positionHeros.x;pos.x < event.motion.x;pos.x++)
                                  {
                                      SDL_BlitSurface(visee, NULL, ecran, &pos);
                                  }
                              }
                              else
                              {
                                  for(pos.x=event.motion.x;pos.x < positionHeros.x;pos.x++)
                                  {
                                      SDL_BlitSurface(visee, NULL, ecran, &pos);
                                  }
                              }
                              SDL_Flip(ecran);
                          }
                      }

                      Ce code marche pour la visée en largeur. (j'ai testé)
                      Mais pour faire plus réaliste faut lui donner la position de la main de ton heros (si il en a) enfin de là où part la visée.
                      Si tu veux aussi le faire en hauteur, réfléchis et si tu trouves pas demande.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      créér une visée de sniper

                      × 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