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 }
3 Réponses :
Vous devez appeler Exemple de Wiki de SDL2 P> sdl_renderpresent code> après tous vos appels de rendu. Dans ce cas après
sdl_renderfillrect (...) code> p>
sdl_renderclear code> est utilisé au début d'une boucle de rendu pour effacer le tampon. P>
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 :)
Après avoir dessiné le Square rouge Vous devez ré-régler la couleur sur blanc avant le prochain sdl_settrenderdrawcolor () code> affecte les deux
sdl_renderfillrect () code> et em>
sdl_renderclear () code>.
sdl_renderclear () code> appel: p>
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 () code> appel.
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! P>
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é.