0
votes

Comment rendre une boîte à l'écran en C ++ en utilisant SDL2?

J'essaie de comprendre la bibliothèque SDL2 en C ++ et ne peut pas sembler configurer correctement le code pour dessiner simplement un rectangle à l'écran. Que devrais-je faire différemment?

#include <SDL.h>
bool success = true;  //success flag for functions, etc
int ScreenWidth = 640;  //screen width and height for SDL window
int ScreenHeight = 480; //
int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1");
    SDL_Window* window = SDL_CreateWindow( "Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ScreenWidth, ScreenHeight, SDL_WINDOW_SHOWN);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF);  

    bool quit = false;
    SDL_Event event;
    while (!quit)
    {
        SDL_RenderClear(renderer);
        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT)
                quit = true;
        }
        SDL_Rect box;
        box.w = 30;
        box.h = 30;
        box.x = 50;
        box.y = 50;
        SDL_SetRenderDrawColor(renderer, 0xFF,0x00,0x00,0xFF);
        SDL_RenderFillRect(renderer, &box);
        SDL_RenderPresent(renderer);    
    }
    return 0; //because main is an int task
}


1 commentaires

Je ne vois rien de mal avec le code présenté (après édition). Peut-être le problème est dans le code que vous n'avez pas montré.


3 Réponses :


2
votes

Vous devez appeler sdl_renderpresent après tous vos appels de rendu. Dans ce cas après sdl_renderfillrect (...)

sdl_renderclear est utilisé au début d'une boucle de rendu pour effacer le tampon.

Exemple de Wiki de SDL2


1 commentaires

D'accord, j'ai ajouté la ligne SDL_RenderPresent (Renderer) après la ligne FILLRECT et déplacé le rendu de clefear jusqu'au début de la boucle, et désormais désormais un écran rouge solide. La fenêtre est définitive de plus de 30x30 pixels, pourquoi cela se produit-il? Merci pour votre réponse, j'ai modifié la question :)



0
votes

sdl_settrenderdrawcolor () affecte les deux sdl_renderfillrect () et sdl_renderclear () .

Après avoir dessiné le Square rouge Vous devez ré-régler la couleur sur blanc avant le prochain sdl_renderclear () appel: xxx


3 commentaires

Cela semble être fonctionnellement identique à ce que j'ai. J'ai ajouté le code complet à l'OP. Merci pour votre réponse :)


J'ai collé votre code dans Visual Studio et cela a fonctionné bien, ce n'est donc pas un problème d'installation SDL ou de quoi que ce soit en dehors du code. Pourquoi ce que je n'ai pas travaillé? Merci encore!


@Hlavallee: Voir la modification. Vous définissez la couleur de tirage en rouge pour le rectangle, puis ne ré-réglez jamais la couleur sur blanc avant le prochain sdl_renderclear () appel.



0
votes

Je l'ai compris!

Je devais mettre SDL_SetRenderDrawColor (rendu, 0xFF, 0xFF, 0xFF, 0xFF); À l'intérieur de la boucle de sorte qu'il réinitialiserait le rendu à blanc chaque tique. Je viens de le remettre en blanc une fois au début, SDL_Renderclear remplissait la fenêtre avec la couleur de tirage actuelle (qui était rouge). Merci à Tinfiolpankakes et à Genpfault pour m'aider!


0 commentaires