Bonjour, Je suis le cours "Apprenez à programmer en C".
J'utilise l'IDE Xcode (10.2.1) et la SDL2. J'ai bien compris qu'il y avait des différences entre la SDL et la SDL2 et j'ai essayé de les prendre en compte. Mon code pour afficher une fenêtre ne bug pas en revanche, il n'affiche rien. 3 jours que j'essaie de trouver une solution sans résultat.
Pouvez vous m'aider ? Voici mon code
#include <stdio.h>
#include <SDL2/SDL.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
SDL_Window *window = NULL;
SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2
// Create window
window = SDL_CreateWindow(
"Test", // window title
SDL_WINDOWPOS_UNDEFINED, // initial x position
SDL_WINDOWPOS_UNDEFINED, // initial y position
640, // width, in pixels
480, // height, in pixels
SDL_WINDOW_OPENGL // flags
);
// Check that the window was successfully created
if (window == NULL) {
// In the case that the window could not be made...
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
// The window is open
SDL_Delay(3000); // Pause execution for 3000 milliseconds
// Close the window
SDL_DestroyWindow(window);
// Clean up
SDL_Quit();
return 0;
}
Tu ne crée pas de SDL_Renderer* dans ton code. Et quand cela sera fait pense à utiliser la fonction SDL_RenderPresent( ) qui prend en paramètre un pointeur de SDL_Renderer (pour qu'il mette à jour la fenêtre, en fait cette fonction sert à afficher une fois que l'on a tout déssiné, le résultat du rendu).
J'ai utilisé la solution proposée par Yoan qui me parait plus légère et ne renvoie pas d'erreur :
#include <stdlib.h>
#include <stdio.h>
#include <SDL2/SDL.h>
int main(int argc, char *argv[]) {
int status = EXIT_FAILURE;
SDL_Window *fenetre = NULL;
SDL_Event event;
// Initialisation + vérification de la SDL : VIDEO.
if (SDL_Init(SDL_INIT_VIDEO) != 0 ) {
fprintf(stdout,"Échec de l'initialisation de la SDL : %s\n", SDL_GetError());
goto quit;
}
// Création fenêtre.
fenetre = SDL_CreateWindow("Tuto SDL 2.", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
if(fenetre == NULL) {
fprintf(stderr, "Impossible de créer la fenêtre : %s\n", SDL_GetError());
goto quit;
}
do {
SDL_WaitEvent(&event);
}while(event.type != SDL_QUIT);
SDL_DestroyWindow(fenetre);
status = EXIT_SUCCESS;
quit:
// Quitter SDL.
SDL_Quit();
return status;
}
Cette solution ne fait pas appel à SDL_Renderer.
Du coup, je ne comprends pas bien pourquoi la fenêtre ne s'affiche pas quand on lui demande de rester ouverte 3 secondes alors qu'elle s'ouvre si on lui demande d'attendre un "Event" (en l'occurence que l'utilisateur ferme la fenêtre manuellement).
Tout n'est pas encore limpide pour moi, mais ça fonctionne et ca me permet de continuer le court
Merci et à la prochaine... j'ai pas fini d'avoir besoin de vous
La , tu nous montre juste une fonction main (donc pas de fonction à priori) , mais surtout n' hésite pas à découper ton code en fonctions dans tes futurs programmes (chaque fonction ne devrait faire qu'une seule tache, mais le faire bien). En fait on voit souvent des débutants qui postent du code avec un 'int main(int argc, cahr *argv[]' bien trop long.
La , tu nous montre juste une fonction main (donc pas de fonction à priori) , mais surtout n' hésite pas à découper ton code en fonctions dans tes futurs programmes (chaque fonction ne devrait faire qu'une seule tache, mais le faire bien). En fait on voit souvent des débutants qui postent du code avec un 'int main(int argc, cahr *argv[]' bien trop long.
En effet, c'est un reflexe que je dois aussi acquérir. Merci
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr