Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme SDL 2

impossible d'ouvrir une fenêtre sous Xcode avec la SDL2.

Sujet résolu
13 janvier 2017 à 3:16:55

Bonjour,

Hier j'ai poster un sujet car je n'arrivais pas à m'en sortir avec la SDL 1.2 qui est utilisée ans le tutoriel de Mathieu Nebra. Ensuite on m'a proposé d'utilisé la SDL 2 et de suivre le tutoriel du Zeste Du Savoir, ce que j'ai fait. Mais de nouveau j'ai un gros problème car je ne peux pas ouvrir de fenêtre ... j'ai essayer de mille manières différentes, chercher sur google etc mais je n'ai rien trouvé :(. Si quelqu'un sait d'où vient mon problème ?

Voici mon code :

//
//  main.c
//  Test SDL2
//
//  Created by Thomas Brose on 12/01/17.
//  Copyright © 2017 Thomas Brose. All rights reserved.
//

#include <stdlib.h>
#include <stdio.h>
#include <SDL2/SDL.h>

int main(int argc, char *argv[]) {
	
	int status =  EXIT_FAILURE;
	SDL_Window *fenetre = NULL;
	
	// 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;
	}
	SDL_Delay(3000);
	SDL_DestroyWindow(fenetre);
	
	status = EXIT_SUCCESS;
quit:
	// Quitter SDL.
	SDL_Quit();
	
	return status;
}

 Et voici ce qui s'affiche à coté de Xcode :

Icone de l'application en cours de programmation

L'icone bouge (l'icône rebondit) pendant 3 secondes puis disparait alors qu'elle devrait ouvrir une fenêtre pendant 3 secondes puis disparaitre.

PS : avec la SDl 1.2 la fenêtre s'ouvrait normalement mais je ne pouvais pas modifié le background.

Merci pour toutes réponses et aides de votre part :D.

-
Edité par YThomasY 13 janvier 2017 à 3:20:38

  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 9:39:44

Je vais supposer à un soucis au niveau de ton IDE. Que ce passe t-il si tu lances ton application hors de ton IDE ?

  • Partager sur Facebook
  • Partager sur Twitter
13 janvier 2017 à 9:43:35

La meme chose exactement c'est pour ca que je croyais que le problème venait du code mais j'ai recopié un tutoriel donc je ne sais pas finalement d'ou vient le problème :euh:

  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 10:36:51

Yop,

Qu'en est-il des messages d'erreurs (les fprintf) ?

  • Partager sur Facebook
  • Partager sur Twitter
13 janvier 2017 à 10:40:43

Le problème c'est également que je n'ai aucun message d'erreur, je ne sais donc pas du tout d'ou vient le problème :(:(:(
  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 10:55:59

Remplaces SDL_Delay par un while(1)  (boucle infinie) voir si quelque chose apparaît ?

Sinon j'imagine que ton installation n'est pas complète/correcte

  • Partager sur Facebook
  • Partager sur Twitter
13 janvier 2017 à 11:21:02

Ca ne change rien :( bon je vais essayer de le réinstaller alors :/

  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 11:31:46

Quand tu dis que ça ne change rien,  ça veut dire que ton icône disparaît toujours au bout de trois secondes ? En ayant mit une boucle infinie ?

Dans ce cas, ton programme a planté plus tôt et donc un fprintf() s'est certainement déclenché. (Je ne sais pas me servir des IDE, mais si tu lances le programme via un terminal tu les verras les fprintf() )

-
Edité par Gam' 13 janvier 2017 à 11:33:24

  • Partager sur Facebook
  • Partager sur Twitter
13 janvier 2017 à 11:40:46

je sais plus ou moins utilisé le terminal avec gcc etc mais je ne sais pas comment ajouter la bibliothèque en compilant via le terminal. Peut-tu m'expliquer stp
  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 12:09:55

Je n'ai pas SDL sous la main et je n'ai pas non plus l'habitude de l'utiliser, mais tu peux lancer ton programme via le terminal de cette manière si je ne dis pas de bêtises :

gcc -Wall -Wextra -I chemin_menant_dans_include -L chemin_menant_dans_lib chemin_executable -lSDL2

J'ai écrit cette ligne en imaginant que tu as placé les fichiers.h dans un dossier include, et d'autres fichiers dans un dossier lib, tous les tutos que j'ai parcouru il y a quelques temps présentaient l'installation de cette manière.

Du coup on peut imaginer que ça donne quelque chose comme :

gcc -Wall -Wextra -I./dossier/include -L./dossier/include main.c -lSDL2

D'ailleurs si tu réussis à lancer ton programme de cette manière, tu peux facilement obtenir des informations précises concernant de possibles problèmes d'installation. Et tu peux utiliser des printf/fprintf pour tenter de voir où ça ne marche pas.

Evidemment, c'est à toi de positionner tes fichiers comme il le faut, et de positionner ta "session terminal" correctement.



-
Edité par Gam' 13 janvier 2017 à 12:12:12

  • Partager sur Facebook
  • Partager sur Twitter
13 janvier 2017 à 13:45:53

Salut,

Je pense tout comme @Gam, qu’il y a un problème à l’exécution (si le code compile et tout, c’est bien que la lib a été trouvé et tout). Essaye quand même avec ce code dans lequel la fenêtre est censée rester ouverte jusqu’à ce que l’utilisateur la fermes.

#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;
}
  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
13 janvier 2017 à 14:48:07

@Gam merci beaucoup de l'attention que tu porte a mon problème je suis en train d'essayer de compiler avec le terminal.

Deuxièmement, j'ai lancer le programme que tu m'as donné @yo@n97one et la fenêtre s'ouvre :D !!! je suis en train d'essaye par contre je ne sais pas pk donc ca ne résoud mon problème qu'a moitié :/

PS : j'ai juste changer les {} que tu avais mis après le do{}while par des ()

PPS :

Last login: Fri Jan 13 14:57:48 on ttys001
You have mail.
MacBook-Pro-de-X:~ X$ cd desktop
MacBook-Pro-de-X:desktop X$ cd programmer
MacBook-Pro-de-X:programmer X$ cd "programmer en c"
MacBook-Pro-de-X:programmer en c X$ cd "test sdl2"
MacBook-Pro-de-X:test sdl2 X$ cd "test sdl2"
MacBook-Pro-de-X:test sdl2 X$ chmod +x main.c
MacBook-Pro-de-X:test sdl2 X$ sudo ./main.c
Password:
./main.c: line 1: //: is a directory
./main.c: line 2: //: is a directory
./main.c: line 3: //: is a directory
./main.c: line 4: //: is a directory
./main.c: line 5: //: is a directory
./main.c: line 6: //: is a directory
./main.c: line 7: //: is a directory
./main.c: line 13: syntax error near unexpected token `('
./main.c: line 13: `int main(int argc, char *argv[]) {'
MacBook-Pro-de-X:test sdl2 X$ 


C'est ce que la console me donne comme erreur quand je lance avec le ./main.c comme tu m'as conseiller

-
Edité par YThomasY 13 janvier 2017 à 15:03:12

  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 15:21:16

Deuxièmement, j'ai lancer le programme que tu m'as donné @yo@n97one et la fenêtre s'ouvre :D !!! je suis en train d'essaye par contre je ne sais pas pk donc ca ne résoud mon problème qu'a moitié :/

PS : j'ai juste changer les {} que tu avais mis après le do{}while par des ()

Je l’avais écrit à la va-vite et sans vérifier, donc il y avait sûrement des erreurs oui. ^^

Sinon, j’ai cherché ce qui pouvait causer ton problème et j’ai trouvé ce sujet et j’ai vu ce message.

You have to load a bitmap image, or display something on the window, for Xcode to start displaying the window.

Ça expliquerait pourquoi la fenêtre ne s’affiche pas.

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
13 janvier 2017 à 15:36:05

Merci beaucoup à vous deux ca fonctionne enfin c'était bien ca le problème : 

yo@n97one 

Sinon, j’ai cherché ce qui pouvait causer ton problème et j’ai trouvé ce sujet et j’ai vu ce message.

You have to load a bitmap image, or display something on the window, for Xcode to start displaying the window.

Ça expliquerait pourquoi la fenêtre ne s’affiche pas


Sans quoi j'aurais j'aurais fini par abandonner je crois ...

Sujet résolu :D:lol:;)

-
Edité par YThomasY 13 janvier 2017 à 15:36:29

  • Partager sur Facebook
  • Partager sur Twitter
#YThomasY#
13 janvier 2017 à 18:44:47

C'est bon à savoir pour les développeur sur mac !
  • Partager sur Facebook
  • Partager sur Twitter

Probleme SDL 2

× 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