Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL rectangle et renderer

Afficher un rectangle sans effacer ce qu'il y a en dessous.

    19 avril 2023 à 19:56:42

    Bonjour, pour apprendre à me servir de la librairie SDL je fais une copie de "paint". J'arrive à afficher un bouton sur la fenêtre mais lorsque je le fais, cela efface les dessins qui était en dessous. 

    Vous pouvez voir que sur la première photo j'ai fais un dessin (magnifique d'ailleurs), sur la deuxième j'affiche mon bouton et sur la troisième je n'affiche plus mon bouton mais mon dessin à disparu.

    Pour afficher un bouton j'utilise SDL_RenderFillRect puis SDL_RenderPresent et pour l'effacer je fais la même chose mais avec un rectangle blanc.

    Quelqu'un aurait une idée pour que je ne "perde" pas le dessin en dessous du bouton ?

    • Partager sur Facebook
    • Partager sur Twitter
      20 avril 2023 à 1:30:09

      Hello,

      TristanPichard1 a écrit:

      Quelqu'un aurait une idée pour que je ne "perde" pas le dessin en dessous du bouton ?

      La seule solution qui existe si tu veux que ton bouton disparaisse de l'écran, c'est afficher à nouveau l'écran sans le bouton. Afficher un rectangle blanc.... affichera un rectangle blanc, mais n'affichera pas ce qui se trouvait à l'écran avant que tu n'y affiches ton bouton.

      Edit: orthographe

      -
      Edité par edgarjacobs 20 avril 2023 à 2:47:06

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        20 avril 2023 à 11:18:11

        Salut,

        Garde en mémoire ton dessin (dans un rectangle prêt à être blitté), et à chaque rendu reblit le. Ainsi même si tu mets un rectangle ou autre au dessus, ailleurs en mémoire ton dessin est intact. 

        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          20 avril 2023 à 11:38:05

          Il est peut être possible de jouer avec la transparence du rectangle que l'on veut dessiner ?

          Le programme ci-dessous dessine un fond bleu, une barre rouge et dessus un carré blanc semi transparent.

          Si on met la transparence du carré à 0, on ne le voit plus.

          #include <stdio.h>
          #include <SDL2/SDL.h>
          #include <stdbool.h>
          
          int main(int argc, char** argv)
          {
              if (SDL_Init(SDL_INIT_VIDEO) != 0 ) {
                  fprintf(stdout, "Échec de l'initialisation de la SDL (%s)\n",
                          SDL_GetError());
                  return EXIT_FAILURE;
              }
          
              // création fenêtre et renderer
              SDL_Renderer *p_renderer = NULL;
              SDL_Window *p_window = NULL;
              if (SDL_CreateWindowAndRenderer(200, 200,
                                              SDL_WINDOW_SHOWN,
                                              &p_window, &p_renderer) < 0) {
                  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "[DEBUG] > %s", SDL_GetError());
                  SDL_Quit();
                  return EXIT_FAILURE;
              }
          
              SDL_SetRenderDrawBlendMode(p_renderer, SDL_BLENDMODE_BLEND);
              SDL_Event events;
              for (bool is_open = true; is_open ; ) {
          
                  while (SDL_PollEvent(&events)) {
          
                      switch (events.type) {
                      case SDL_QUIT:
                          is_open = false;
                          break;
                      }
                  }
          
                  // le fond bleu
                  SDL_SetRenderDrawColor(p_renderer, 0, 0, 240, 0);
                  SDL_RenderClear(p_renderer);
          
                  // une barre rouge
                  SDL_Rect barre = {20, 70, 160, 50};
                  SDL_SetRenderDrawColor(p_renderer, 192, 0, 0, 255);
                  SDL_RenderFillRect(p_renderer, & barre);
          
                  // un carré blanc semi transparent
                  SDL_Rect carre = {50, 50, 100, 100};
                  SDL_SetRenderDrawColor(p_renderer, 255, 255, 255, 128); // dernier paramètre
                  SDL_RenderFillRect(p_renderer, & carre);
          
          
                  SDL_RenderPresent(p_renderer);
              }
          
              SDL_DestroyRenderer(p_renderer);
              SDL_DestroyWindow(p_window);
              SDL_Quit();
          
              return 0;
          }

          bricolé à partir de morceaux trouvés sur internet (je ne connais rien à la SDL :))


          Enfin le mieux, si on ne veut pas voir le carré, c'est de ne pas le dessiner...







          -
          Edité par michelbillaud 20 avril 2023 à 21:28:03

          • Partager sur Facebook
          • Partager sur Twitter
            20 avril 2023 à 11:41:53

            Salut,

            Il faut utiliser une texture pour le rendu (le dessin), les utilitaires et autres affichages "temporaires" doivent être faits sur une autre texture.

            L'idée est assez simple, si tu ne veux pas bousiller une image, alors ne dessine pas dessus.

            En plus, si tu dessines directement sur ton renderer, tu vas être emmerder pour sauvegarder ton dessin.

            Bonne continuation.

            -
            Edité par drx 20 avril 2023 à 11:48:54

            • Partager sur Facebook
            • Partager sur Twitter

            Bonhomme !! | Jeu de plateforme : Prototype.

            SDL rectangle et renderer

            × 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