Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Problème collision de laser sur monstre

Quand la surface laser touche la surface monstre, elle disparait

Sujet résolu
    18 avril 2006 à 18:48:44

    Salut à tous,
    J'ai un petit problème avec mon code. Ce que je veux faire, c'est lorsque mon laser (une surface de 2px de large et tt l'écran de long) touche un monstre (39px de large) bah il disparaissent.
    Mon code actuel (ne faisant rien évidemment)

    // Blittage des lasers
                    if(laserok) // laserok est la variable qui passe a 1 quand j'appuie sur la touche "tir"
                    {
                            while(i != nbrei)
                            {
                                    nbrei++;
                                    while(positionLaser[nbrei].y > 0)
                                    {
                                            positionLaser[nbrei].y-=5;
                                            if(positionLaser[nbrei].y > 0)
                                            {
                                                    SDL_BlitSurface(laser, NULL, ecran, &positionLaser[nbrei]);
                                            }
                                    }
                            }
                            nbrei = 0;
                    }

            //Si un laser touche un pete
            for(y = 0; y < 10; y++)
                    {
                        if(positionPete[y].x > positionLaser->x > positionPete[y].x+39)
                    peteEnVie[y] = 0;
                    }

                    // On blitte les petes
                    for(y = 0; y < 10; y++)
                    {
                        if(peteEnVie[y] ==  1)
                        {
                    SDL_BlitSurface(pete, NULL, ecran, &positionPete[y]);
                        }
                    }


    Toutes mes variables sont déclarées (évidemment). La variable peteEnVie est un tableau de 10 valeurs (autant que de petes (monstres)) initialisé à 1.
    Mon truc pour les lasers marchent bien, c'est que quand ils croisent un pete, ce dernier ne disparait pas.

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      18 avril 2006 à 19:08:33

      Tu le fait disparaitre en modifiant la composante alpha, je pense que ca doit etre pas mal ...
      • Partager sur Facebook
      • Partager sur Twitter
        18 avril 2006 à 19:47:01

        Ouais mais j'ai qu'une seule surface, blittée 10 fois, si je modifie la transparence alpha, ça le fera sur toutes, nan ?
        • Partager sur Facebook
        • Partager sur Twitter
          18 avril 2006 à 20:23:43

          if(collision)
          alpha = 0;
          else
          alpha = 255

          et tu blittes non? essaye!
          • Partager sur Facebook
          • Partager sur Twitter
            18 avril 2006 à 20:27:20

            Je ne peux malheursement pas essayer maintenant, je ferais ça demain matin. Sinon, je suis pas sur que ça va marcher, mais bon, j'essaierai.
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 10:09:59

              Aucune chance que ça marche :(
              L'alpha, ça se met sur une surface. Dans mon cas, j'en ai une que je blitte 10 fois. Donc si je modifie l'alpha de ma surface, les 10 vont disparaître.
              Donc c'est pas bon cette méthode.

              Pourquoi la mienne ne marche pas ?
              • Partager sur Facebook
              • Partager sur Twitter
                19 avril 2006 à 10:25:45

                Fais un tableau de surface et une case du tableau est un monstre, quand la case de peteEnVie est égal à 0, tu efface le pete.

                Je sais pas si c'est très compréhensible ce que je vien de dire.

                PS:En plus de Arkhiall effacerai les pete puis quand le laser disparaiterai ils reviendraient.
                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2006 à 10:29:25

                  En gros, tu me demande de faire 10 surfaces au lieu d'une ?

                  Mais ma méthode n'est elle pas mieux ? Lorsqu'un laser touche le pete n°5, la variable peteEnVie[5] passe à 0 et si elle est a 0 on ne blitte pas.

                  Le truc don je ne suis pas sur, c'est cette ligne
                  if(positionPete[y].x > positionLaser->x > positionPete[y].x+39)


                  Edit : C'est bon j'ai trouvé
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [SDL] Problème collision de laser sur monstre

                  × 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