Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL, evenement, souris :p

Besoin d'aide pour realiser deux trucs :p

    25 juillet 2006 à 20:31:42

    Coucou les Zeros :)

    Alors voila, je me suis mis a la SDL :p
    J'ai tout lu et tout jusqu'a la fin de la partie event 2/2 :)

    Et voila j'ai voulu essayer de realiser 2 trucs et ca na pas marche :(

    Je vous les expliques:

    Le 1er

    On a par exemple le jeu des tampons (cf partie 1/2 du cours de mateo sur les evenements)
    Il consiste a appliquer 10 zozors sur l'ecran a differrentes positions a chaque cliques.

    Or moi je voutrais ameliorer ca :
    Le pointeur de la souris disparait et est remplace par l'image de zozor.
    Quand on clique zozor est blite a l'endroit ou etait le curseur-zozor.

    Ici j'ai essaye de faire du SDL_MOUSEMOTION mais:
    -Si je fais juste un blit de zozor a la position event.mouse.x/y il me fait donc une trainee de zozor qui a tot fait de remplir tout l'ecran :p

    -Si je fait un SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255);
    ca m'effaceras tous les zozors que j'ai deja blite de toyte facon :/
    o_O
    Je vois pas du tout comment faire car a ma connaissance on ne peux pas debliter un seul truc (ici ce serait la derniere position de notre curseur zozor)


    Le 2nd

    C'est que je m'entrainer en faisant un truc genre le crayon de paint:
    Quand on reste appuye sur le bouton et qu'on bouge la souris ca blit notre pixel (comme la traine de zozor plus haut que je voulais ne pas faire :p) et donc on a un trait noir aui apparait ;)
    Hors ici je me heurte a un probleme :) :
    Quand je realise mon programme, j'utilise donc
    //...
    case SDL_MOUSEBUTTONDOWN:
    case SDL_MOUSEMOTION:
    /...


    et ici quand je lance le programme il ne me blit qu'un pixel que lorsque j'appuie et relache et bouge en meme temps la souris :p

    donc je suis coince et j'arrive pas a trouver la solution :)

    Merci :)

    et bon code :D
    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2006 à 21:06:16

      mateo21 donne dans son cours la solution à ton problème no1 :

      Citation : mateo21

      Faites en sorte que lorsqu'on clique avec la souris sur l'écran, ça colle un Zozor à l'endroit indiqué.
      Oui je sais, on l'a déjà fait pour étudier l'évènement "clic de la souris", mais cette fois je veux que l'on puisse "coller" à l'écran 10 Zozors maximum à la fois (alors qu'auparavant on ne pouvait en coller qu'un seul à la fois).

      Cet exercice est en fait assez similaire au précédent : vous n'avez besoin que d'une surface Zozor, mais de plusieurs SDL_Rect (faites un tableau).
      La difficulté sera de savoir comment initialiser ces positions, car il ne faut pas qu'il y ait de Zozors affichés à l'écran au départ. A vous de trouver une solution pour ne pas blitter de Zozor si, par exemple, les coordonnées sont (-1, -1).

      La touche "Suppr" doit servir à effacer l'écran (il faudra réinitialiser toutes les coordonnées à (-1, -1) par exemple).


      et le reste est dans le cours (SDL_BlitSurface() + SDL_Flip())

      pour le No 2 :
      soit tu utilises SDL_EnableKeyRepeat(10,10);
      soit tu as une variable (int) que tu mets à 1 lors de l'appuye sur le bouton et à 0 lors du relachement et après la boucle d'évènement tu fais :
      if(ta_variable == 1)
      {
      // tu dessines
      }
      • Partager sur Facebook
      • Partager sur Twitter
        26 juillet 2006 à 4:13:45

        1)
        J'ai reussi son exercice et ameliore (on a le choix entre 7 tampons, etc...) j'ai donc un mini paint avec des tampons :)
        Pourtant cela ne m'aide pas :euh:

        Tu me dis de faire un tableau OK.

        Je fais mon tableau de zozor-curseur :)

        ET ensuite je fais quoi?

        Mon curseur aura la tete d'un zozor oki dac.
        Je peux le bliter OK.

        Mais, soit:
        a/ a chaque fois que je bouge la souris ca me blit des zozors partout ou la souris est passe (mouse.motion.x/y power :D )
        b/ a chaque fois que je bouge la souris mon zozor bouge et ne laisse pas de trace mais les anciens blits sont effaces...


        J'ai pas du bien comprendre ton idee... Peut-Tu etre plus clair s'il te plait?


        2)
        EnableKeyRepeat c'est pour le clavier.

        Je vais tester pour le coup de la variable :)


        Merci ;)

        • Partager sur Facebook
        • Partager sur Twitter
          26 juillet 2006 à 10:20:57

          pour le 1) tu dois avoir mal codé le truc.
          Le code doit ressembler à :
          // le debut
          boucle d'évènement
          blitter zozor au niveau de la souris
          for(i=0;i<X;i++)
          {
          blitter zozor au position tableau[i],x et tableau[i].y si différents de -1
          }
          SDL_Flip()
          // le reste

          la SDL doit avoir été initialisée avec SDL_DOUBLEBUF
          • Partager sur Facebook
          • Partager sur Twitter

          SDL, evenement, souris :p

          × 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