Titre: [C] SDL et rafraichissement d'écran Posté par: Snake046 le 16 Novembre 2006 à 22:06:05 Voilà, j'essaye de tester et étendre mes compétences en faisant du caca sur mon IDE.
Et, je miss knowledge, comme le dit newbie-contest. J'essaye de tenter un "écran" de chargement, qui s'actualise donc à chaque étape (lorsque le programme ouvre un fichier pour récupérer quelques données dessus, lorsque je charge d'autres images, des sons, et à la fin pour afficher une image finale qui invite à taper une touche pour continuer). Et pour cela j'utilise SDL, SDL_Image, et éventuellement quand j'aurais réglé ce problème je générerais les textes avec SDL_ttf. Le problème, c'est que la première image s'affiche une fraction de seconde, et plus rien... Je m'attendais pas vraiment à mieux pour dire vrai : j'ai suivi les cours de newbie-contest, et maintenant j'essaye de tester un peu des nouveaux trucs qui me passent par la tête, notamment cela. J'ai conçu cela en faisant : D'abord, IMG_Load (pour toutes), puis FillRect, puis Blit, puis Flip. Ensuite, je fait les opérations, puis FillRect, puis Blit, puis Flip, etc... Jusqu'à la phase finale (3ème) : là je charge une nouvelle image, je fillrect, je blit l'image, je flip, je libère la mémoire des deux premières images, je fait une boucle qui ne s'arrêtent qu'à l'appuis d'une toûche. Et je ne comprend pas pourquoi la première image apparaît une fraction de seconde, puis la fenêtre deviens noire... si je me souviens bien, SDL_Blit prépare le future écran, et SDL_Flip actualise l'image... je ne vois pas ce qui cloche. Quoiqu'il en soit, j'ai tenté pas mal de méthodes qui n'ont pas fonctionnés. Je voulais finir sur une série de if et else if dans une boucle menée à la baguette par un piti booléen : chacun de ces if / else if contiennent des informations sur l'écran à afficher lorsque la valeure concernée est vraie et sur les réactions aux évenements qu'il faudra avoir. Comme ceci par exemple : Code: bool continuer = true; Il y a-t-il un moyen plus efficace pour avoir quelque chose dans le genre ? Titre: [C] SDL et rafraichissement d'écran Posté par: Nebelmann le 17 Novembre 2006 à 11:33:49 Citation j'ai suivi les cours de newbie-contest :?: :?:Titre: [C] SDL et rafraichissement d'écran Posté par: Snake046 le 17 Novembre 2006 à 15:39:41 Nioups ! Désolé ! Je voulais dire les cours du Site du Zéro !
[newbie-contest hypnotizachion] Titre: [C] SDL et rafraichissement d'écran Posté par: neoflo le 17 Novembre 2006 à 22:26:36 Tu utilises quel flag dans ton SDL_SetVideoMode ?
Il faut mettre : SDL_DOUBLEBUF pour activer le double buffering. Par exemple comme ça : SDL_SetVideoMode(pfenetre->resolutionx,pfenetre->resolutiony, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); Titre: [C] SDL et rafraichissement d'écran Posté par: Snake046 le 18 Novembre 2006 à 20:13:13 J'ai vérifié, le double buffering est pourtant bien activé.
Bon, je vous donne le code, ce sera plus simple ;) ! Code: #include <stdlib.h> Mais je me demande justement si ya pas un problème dans ce while ? La lecture de fichier je ne suis pas sûr de l'avoir vraiment comprise. Titre: [C] SDL et rafraichissement d'écran Posté par: neoflo le 18 Novembre 2006 à 20:54:38 Bon, j'ai carrément du mal à lire ton code, il faudrait que tu essayes de découper en plus de sous fonction.
Quelque remarque général (je ne dis pas que ce soit ça qui fasse planter) : - Il est déconseillé de déclarer des pointeurs l'un à la suite de l'autre, prefère SDL_Surface* surf1; SDL_Surface* surfe2; pour plus de lisibilité Dans ta boucle : Code: while(continuer) Dans : Code: if(file_login != NULL) Code: if(file_login == NULL) - Tu as oublié de liberer l'espace pour la 6ém image ;) Citation La lecture de fichier je ne suis pas sûr de l'avoir vraiment comprise. Dans ce cas, essaye de tester ce bout de code séparement de SDL.Titre: [C] SDL et rafraichissement d'écran Posté par: neoflo le 18 Novembre 2006 à 21:34:52 Une question.
Tu comptes insérer des requetes SQL tout dans le même fichier. C'est vraiment bourrin... Pourquoi tu as besoin d'une base de donnée ? Titre: [C] SDL et rafraichissement d'écran Posté par: Snake046 le 19 Novembre 2006 à 09:41:11 Voilà, j'ai modifié le script : plus de bool, des long valant zéro ou un, les déclarations des SDL_Surface sont plus lisibles, et dans la boucle continuer j'ai remplacé le exit() par continuer = 0.
Citation Tu comptes insérer des requetes SQL tout dans le même fichier. C'est vraiment bourrin... Pourquoi tu as besoin d'une base de donnée ? Très bourrin oui, mais je tiens juste à tester quelques trucs pour pouvoir après faire des programmes plus grands.Du reste et pour tout avouer, je ne sais pas faire de programmes en plusieurs fichiers. J'ai jamais compris comment ça marchait, en fait je crois pas qu'on m'ait déjà expliquer... enfin je vais voir ça alors. Titre: [C] SDL et rafraichissement d'écran Posté par: neoflo le 19 Novembre 2006 à 21:53:45 Tiens, j'avais écrit un petit truc sur les phases de compilation, c'est assez sommaire, mais ça pourra peut être t'interesser :
http://www.newbiecontest.org/punbb/viewtopic.php?id=599 |