Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > probleme d'affichage de texte sous SDL > Lecture du sujet

probleme d'affichage de texte sous SDL

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne christhemagic # Posté le 18/07/2008 à 16:35:57
Groupe : Membres
Bonjour,
c'est un programme qui doit afficher un écrand moche (bleu) et dans lequel est afficher un text...

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspuser.h>
#include <pspctrl.h>
#include <psppower.h>
#include <pspiofilemgr.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <pspsdk.h>
#include <pspctrl.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>


PSP_MODULE_INFO("Virtual kickFoot by chris", 0, 1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
 
 
int exit_callback(int arg1, int arg2, void *common); //ne pas toucher (permet de quitter avec le boutton home , et de mettre en veille , ect)
int CallbackThread(SceSize args, void *argp); //
int SetupCallbacks(void); //


int main()
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Surface *ecran = NULL, *FauxVirus = NULL;
    SDL_Rect positionTexte, positionEcran;

    TTF_Init(); //Initialisation de la librairie SDl_ttf
 
 
    TTF_Font *police = NULL;
 
    SDL_Color couleurBlanc = {255, 255, 255};
    police = TTF_OpenFont("./data/arial.ttf", 20);
    FauxVirus = TTF_RenderText_Solid(police,"You are infected by the virtual kickfoot", couleurBlanc);
    
    positionTexte.x = 0;
    positionTexte.y = 0;
    positionEcran.x = 0;
    positionEcran.y = 0;


    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("The Virtual KickFoot", NULL);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));
    
    pspDebugScreenInit();
    SetupCallbacks();
    int continuer= 1;
    
    while (continuer)
    {
    
    SDL_BlitSurface(ecran,NULL,ecran,&positionEcran); //affichage de l'image
    SDL_BlitSurface(FauxVirus,NULL,ecran,&positionTexte); //affichage du texte
    SDL_Flip(ecran);
 
 }
    TTF_CloseFont(police); // on ferme la police pour liberer de la memoire quand on quitte
 
    SDL_Quit(); // on ferme la lib sdl pour liberer de la memoire quand on quitte
 
    SDL_FreeSurface(ecran); //on ferme l'image "fond.png" pour liberer de la memoire quand on quitte
 
 
return 0;
}



Voila mon code, mon compilateur (dev C++) m'indique rien quant je compile tout, et quant j'essaie de déboguer il me marque "une violation d'accès (erreur de segmentation) est apparue dans votre programme"
je ne sais pas ou donné de la tête et je ne vois pas du tout ou est le problème, j'ai bien fait les linkers...; mais rien...

merci d'avance à celui qui trouvera ou est le probleme.
Hors ligne noob4ever # Posté le 18/07/2008 à 16:39:37
I aim for the middle.
Avatar
Groupe : Membres
Tu as un outil pour ce genre de problème qui est bien plus performant que nous tous, c'est le debugger, sers toi en pour trouver la ligne qui pose soucis ;) .

Mets ta bouche contre le trottoir tout de suite.
 
Hors ligne moi281184 # Posté le 18/07/2008 à 17:18:22
Groupe : Membres
Pour commencer il faut que tu identifies la ligne posant problème. Comme dit noob4ever le debuggueur ne devrait pas avoir de mal pour faire ça. Puis quand tu auras trouvé la ligne a problème nous pourrons t'aider.

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne christhemagic # Posté le 18/07/2008 à 20:55:29
Groupe : Membres
bonsoir,
j'ai éliminer quelque ligne et j'ai mon d'erreur (le débogueur marche cette fois ci alors que tout a l'heure non)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>


PSP_MODULE_INFO("Virtual kickFoot by chris", 0, 1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
 
 
int exit_callback(int arg1, int arg2, void *common); //ne pas toucher (permet de quitter avec le boutton home , et de mettre en veille , ect)
int CallbackThread(SceSize args, void *argp); //
int SetupCallbacks(void); //


int main()
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Surface *ecran = NULL, *FauxVirus = NULL;
    SDL_Rect positionTexte, positionEcran;

    TTF_Init(); //Initialisation de la librairie SDl_ttf
 
 
    TTF_Font *police = NULL;
 
    SDL_Color couleurBlanc = {255, 255, 255};
    police = TTF_OpenFont("./data/arial.ttf", 20);
    FauxVirus = TTF_RenderText_Solid(police,"You are infected by the virtual kickfoot", couleurBlanc);
    
    positionTexte.x = 0;
    positionTexte.y = 0;
    positionEcran.x = 0;
    positionEcran.y = 0;


    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("The Virtual KickFoot", NULL);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));
    
    pspDebugScreenInit();
    SetupCallbacks();
    int continuer= 1;
    
    while (continuer)
    {
    
    SDL_BlitSurface(ecran,NULL,ecran,&positionEcran); //affichage de l'image
    SDL_BlitSurface(FauxVirus,NULL,ecran,&positionTexte); //affichage du texte
    SDL_Flip(ecran);
 
 }
    TTF_CloseFont(police); // on ferme la police pour liberer de la memoire quand on quitte
 
    SDL_Quit(); // on ferme la lib sdl pour liberer de la memoire quand on quitte
 
    SDL_FreeSurface(ecran); //on ferme l'image "fond.png" pour liberer de la memoire quand on quitte
 
 
return 0;
}


les erreurs du compilateur :

Citation : debugueur
8 C:\Dev-Cpp\main.c syntax error before string constant
8 C:\Dev-Cpp\main.c [Warning] data definition has no type or storage class
9 C:\Dev-Cpp\main.c syntax error before '|' token
9 C:\Dev-Cpp\main.c [Warning] data definition has no type or storage class
13 C:\Dev-Cpp\main.c syntax error before "args"
C:\Dev-Cpp\main.c In function `SDL_main':
18 C:\Dev-Cpp\main.c number of arguments doesn't match prototype
53 C:\Dev-Cpp\mingw32\include\SDL\SDL_main.h prototype declaration
C:\Dev-Cpp\Makefile.win [Build Error] [main.o] Error 1



l'érreur de la ligne 53 provient du fichier sources de SDL
Code : C
1
2
/* The prototype for the application's main() function */
extern C_LINKAGE int SDL_main(int argc, char *argv[]);


voila, merci de votre aide
Hors ligne noob4ever # Posté le 18/07/2008 à 21:05:33
I aim for the middle.
Avatar
Groupe : Membres
Tu as écrit int main(), mais SDL attend le prototype suivant :

Code : C
1
int main(int argc, char** argv)

Mets ta bouche contre le trottoir tout de suite.
 
Hors ligne christhemagic # Posté le 18/07/2008 à 22:11:34
Groupe : Membres
bonsoir,

effectivement ce que tu viens de me dire a effacer l'erreur de la ligne 53, mais par contre le reste....

merci de votre aide;)
Hors ligne etrange02 # Posté le 18/07/2008 à 22:20:12
Pourquoi, il en faut une?
Avatar
Groupe : Membres
Que sont Citation : christhemagic
PSP_MODULE_INFO("Virtual kickFoot by chris", 0, 1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
????

:colere2: Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe :colere2:
 
Hors ligne christhemagic # Posté le 18/07/2008 à 23:03:43
Groupe : Membres
C'est un ami à moi qui de passage sur mon programme (et de passage en France OSEF), m'as recommandé cela, et puis comme j'ai fais un séjour à l'hosto j'ai pas pus testé quant il été là.

Doit-je l'enlevé?

merci de votre aide
Hors ligne etrange02 # Posté le 18/07/2008 à 23:15:17
Pourquoi, il en faut une?
Avatar
Groupe : Membres
Pour ne pas te mentir, je ne connais pas ce code. As-tu fais une recherche sur google ? J'ai trouvé ceci

Edit :
Je te laisse faire les modifications...

Ajoute ces en-têtes

Code : C
1
2
# include <pspdebug.h>
# include <pspkernel.h>


et vérifie que tu as bien linké les bibliothèques appropriées.

C'est tout ce que je vois pour le moment.
Édité le 18/07/2008 à 23:28:56 par etrange02

:colere2: Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe :colere2:
 
Hors ligne christhemagic # Posté le 19/07/2008 à 11:16:35
Groupe : Membres
bonjour,

en faite j'ai l'impression que c'est un programme pour la PSP, mi je veux juste affiché du texte dans une fenêtre SDL.
A votre avis dois-je gardé que cela?

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

int main(int argc, char** argv)
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Surface *ecran = NULL, *FauxVirus = NULL;
    SDL_Rect positionTexte, positionEcran;

    TTF_Init(); //Initialisation de la librairie SDl_ttf
 
 
    TTF_Font *police = NULL;
 
    SDL_Color couleurBlanc = {255, 255, 255};
    police = TTF_OpenFont("./data/arial.ttf", 20);
    FauxVirus = TTF_RenderText_Solid(police,"You are infected by the virtual kickfoot", couleurBlanc);
    
    positionTexte.x = 0;
    positionTexte.y = 0;
    positionEcran.x = 0;
    positionEcran.y = 0;


    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("The Virtual KickFoot", NULL);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 255));
    
    int continuer= 1;
    
    while (continuer)
    {
    
    SDL_BlitSurface(ecran,NULL,ecran,&positionEcran); //affichage de l'image
    SDL_BlitSurface(FauxVirus,NULL,ecran,&positionTexte); //affichage du texte
    SDL_Flip(ecran);
 
 }
    TTF_CloseFont(police); // on ferme la police pour liberer de la memoire quand on quitte
 
    SDL_Quit(); // on ferme la lib sdl pour liberer de la memoire quand on quitte
 
    SDL_FreeSurface(ecran); //on ferme l'image "fond.png" pour liberer de la memoire quand on quitte
 
 
return 0;
}



merci de votre aide
Hors ligne GuilOooo # Posté le 19/07/2008 à 11:40:57
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Citation : Le débogueur
8 C:\Dev-Cpp\main.c syntax error before string constant
8 C:\Dev-Cpp\main.c [Warning] data definition has no type or storage class
9 C:\Dev-Cpp\main.c syntax error before '|' token
9 C:\Dev-Cpp\main.c [Warning] data definition has no type or storage class
13 C:\Dev-Cpp\main.c syntax error before "args"
C:\Dev-Cpp\main.c In function `SDL_main':
18 C:\Dev-Cpp\main.c number of arguments doesn't match prototype
53 C:\Dev-Cpp\mingw32\include\SDL\SDL_main.h prototype declaration
C:\Dev-Cpp\Makefile.win [Build Error] [main.o] Error 1


Non !


Ce que tu nous montre là, ce n'est pas la sortie du débogueur, mais celle du compilateur ! Ce sont deux choses complètement différentes. Le compilateur te signale les erreurs qui l'empêchent de générer un exécutable. Le débogueur te signale les erreurs que fait un exécutable théoriquement correct, mais qui fait quelque chose qu'il n'a pas le droit de faire (typiquement, déréférencer un pointeur NULL, diviser par 0...).

Ton code, dans le dernier post, semble correct, sauf la ligne 37 qui est un peu suspecte (tu blittes l'écran sur lui-même ? WTH ?). Aussi, le code ne vérifie à aucun endroit que les actions qu'il effectue se sont bien passées. Par exemple, tu fais un TTF_OpenFont, mais tu ne vérifies pas si le pointeur retourné est bien différent de NULL.

Donc, si le fichier TTF en question est introuvable, on essaie de l'utiliser quand même, alors qu'il n'a pas été chargé : crac. À part ça, ça ressemble en effet à un programme SDL qui tournerait sur un ordinateur de bureau. M'enfin, il serait appréciable d'arrêter de faire des choses au hasard...
Édité le 19/07/2008 à 11:44:37 par GuilOooo

Ma série d'articles « Paradigmes » : Intro - Impératif
OpenCola, la seule boisson open-source au monde !
 
Hors ligne etrange02 # Posté le 19/07/2008 à 13:02:43
Pourquoi, il en faut une?
Avatar
Groupe : Membres
Une autre question : Comment penses-tu arrêter ton programme ? Je ne vois aucune gestion des événements. N'oublie pas non plus TTF_Quit() pour désactiver l'annexe avant de quitter. Met aussi toutes tes variables en début, juste après le main(...) : c'est du C et non du C++ !

:colere2: Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe :colere2:
 
Hors ligne christhemagic # Posté le 19/07/2008 à 14:34:31
Groupe : Membres
je me suis embrouillé au début pour le débugueur mais en effet je voulais dire compilateur.
GuilOooo on dirais que tu m'agresse dans la tournure de tes propos ^^


Bon c'est bon j'ai trouver la solution, je vais m'aider de [url=http://www.siteduzero.com/tuto-3-7420-1-ecrire-du-texte-avec-sdl_ttf.html]cela[/url]

merci de votre aide tout de même, j'avais pas pensée à allez voir sur le lien, sa doit être encore l'éffet des médicament que je prend...

merci encore et bonne journée ;)

(l'administrateur peut fermer le topic)

Hors ligne GuilOooo # Posté le 19/07/2008 à 14:40:40
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Oups, je voulais pas t'aggresser. C'est juste que c'est une confusion très courante sur ce forums, et ça serait cool de pouvoir « l'éradiquer ». Donc j'y met un peu de vigueur ^^ .

Sinon, l'administrateur n'est pas obligé de fermer le topic (si on fermait tous les topics résolus, ça prendrait beaucoup de temps), par contre tu disposes d'un lien « indiquer que mon problème est résolu » en bas de cette page, sous le formulaire rapide. Il suffit de cliquer dessus :) .

Ma série d'articles « Paradigmes » : Intro - Impératif
OpenCola, la seule boisson open-source au monde !
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 164 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.1071s (0.0911s)