SDL: Afficher un texte dans une fenêtre

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Messagede YuGiOhJCJ le 18 Avr 2005 17:20

OK je vais faire ligne par ligne pou l'instant...
Merci à toi.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

arf marche pas avec return

Messagede YuGiOhJCJ le 28 Avr 2005 01:57

J'ai essayé avec return mais ça a pas marché:
Code: Tout sélectionner
/***LOADTTF***/
TTF_Font *loadTTF(){
   TTF_Font *font;
   font=TTF_OpenFont(police, 22); //Taille de la police
   if(!font) {
       printf("Impossible de charger la police: %s\n", TTF_GetError());
   }//Fin de if(!font)
   return font;
}

...

main(){

...

loadTTF();

...

}


L'erreur du compilateur:

Code: Tout sélectionner
test.c: Dans la fonction « main »:
test.c:239: error: `font' undeclared (first use in this function)
test.c:239: error: (Each undeclared identifier is reported only once
test.c:239: error: for each function it appears in.)


Tu peux revoir le code que tu m'a donné?
Ya sûrement des erreurs quelque par...La variable font est toujours concidéré comme non-déclarée...
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede SephyYazoo le 28 Avr 2005 02:21

ha oui mon cerveau me dit "Fatal error" et y commence à prendre feu :goutter: :goutte:
SephyYazoo
 

Messagede moi1392 le 28 Avr 2005 11:13

avec segmentation fault, ça aurait fait plus vrai :oui:
Et pour rester dans l'ambiance SDL, tu ajoutes, SDL parachute deployed !!!!
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

...

Messagede YuGiOhJCJ le 28 Avr 2005 13:53

alors tu as trouvé le problème moi1392?
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 28 Avr 2005 14:23

desolé j'avais zappé :oops: voila :

quand je te dis de retourné la font, il faut ensuite la récuperer pour t'en servir :

Code: Tout sélectionner
main(){
TTF_Font *font;
...
font = loadTTF();

// j'ecris quelque chose avec la font...
...

// je libère la font
...
}


tu pourrais même avoir plusieurs font différentes... en passant le nom en paramètre à loadTTF :

Code: Tout sélectionner
/***LOADTTF***/
TTF_Font *loadTTF(cont char *police){
   TTF_Font *font;
   font=TTF_OpenFont(police, 22); //Taille de la police
   if(!font) {
       printf("Impossible de charger la police: %s\n", TTF_GetError());
   }//Fin de if(!font)
   return font;
}

int main()
{
TTF_font *font1, *font2;

font1 = loadTTF("police1"); // avec un "vrai" nom de police
font2 = loadTTF("police2"); // idem


// ecrire avec les fonts
...

// liberer font1
TTF_free(font1); // je ne sais plus comment on libère ubne font... mais tu auras compris je pense...

// recharger une autre font
font1 = loadTTF("police3");

// fait ce qui te plait ;)
...
}
Dernière édition par moi1392 le 28 Avr 2005 14:41, édité 1 fois.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede Vally8 le 28 Avr 2005 14:26

je sais pas si c'est mon ecran, mais quand vous faites du code, j'ai tout le code qui est écrit dans toutes les couleurs de l'arc en ciel :rire:
Moi, j'aime schtroumpfer...
Si vous voulez faire une soluce, plutôt que de m'envoyer un MP, postez-là ici (j'ai rarement le temps de répondre à tous les MP)
Avatar de l’utilisateur
Vally8
Gouroute du Site
Gouroute du Site
 
Messages: 15567
Inscription: 07 Mai 2004 18:14
Localisation: Au pays des schtroumpfs
Jeu(x) du moment: Professor Layton, Tales of Vesperia, Dragon Quest 9

Messagede Mateooo le 28 Avr 2005 14:36

c'est dans ton écran... ou alors, tous ceux du cdi, de ma mère, et du mien buggent!
Mateooo
 

Messagede YuGiOhJCJ le 28 Avr 2005 14:43

C'est pas très interrssent alors...
Parce que je suis quand même obligé de rajouter cette ligne dans ma fonction main():
main(){
TTF_Font *font;
...
}

Et justement le but c'était de trouver cette ligne juste dans la fonction loadTTF() et ne pas la déclarer en globale...C'est donc quelque chose d'impossible à réaliser?
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 28 Avr 2005 14:54

il faut bien qu'à un endroit tu déclares une variable du type TTF_font et qu'elle soit accessible quand tu t'en sers !!

L'avantage de cette méthode, c'est que tu peux t'en servir ou tu veux.. dans main ou ailleurs, et tu n'a pas à chaque fois à recopier le code du chargement :oui:

l'inconvenient, c'est que si tu utilises plusieurs fois la même font sans la liberer, tu utiliseras deux fois plus de mémoire...

Dans tous les cas, si tu souhaites charger ta font "une fois pour toutes", c'est une variable globale qu'il te faut utiliser, ou un équivalent.... (membre ou variable locale statique...)

voila tu sais tout :oui: utilise ce que tu préfère... mais les variable globales, c'est vite le bordel, car tu en as de plus en plus !! essaie alors de les limiter au strict minimum !!
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 28 Avr 2005 16:08

En globale, je comprends...je la met en main() et ça marche tout le temps.
Mais j'aimerai bien que ma variable soit dans loadTTF()...Mais si c'est pour écrire quand même en main() la variable c'est pas interressent pour moi.

En fait dans les 2 cas, je dois écrire la variable TTF_Font *font; dans main(). C'est normal ça?

Moi je croyais qu'en locale, on initialisais la variable dans une fonction autre que main() et puis qu'on faisait dans main() un truc comme : loadTTF(); et que on avait pas besoin d'écrire TTF_Font *font; dans main() puisque ct déjà écris dans la fonction loadTTF();

Tu me comprends? J'espère que j'ai été assez clair...
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 28 Avr 2005 17:26

je ne sais pas si j'ai vraiment compris... je vais quand meme essayer de t'expliquer:

une variable n'est qu'un nom qui sert à designer un "objet" (par objet, j'entends morceau de mémoire) et donc, si à un moment ou un autre, tu veux écrire du texte en utilisant SDL_ttf, il faut lui dire avec quelle police le faire ! Donc tu as à cet endroit besoin de pouvoir désigner l'objet police avec lequel tu souhaite écrire.. quand tu es dans une fonction, les deux seul typres de variables que tu peux utilsier sont les variables globales, et celles locales à ta fonction, donc forcément, si ta variable n'est pas globale, elle doit être locale à ta fonction.
(tout ça pour le C bien sur.. en POO, il y a un cas supplémentaire, mais cela reviens plus ou moins aux cas présents.)

de toute facon, même si tu ne chargais qu'une seule fois ta piloce dans un variable "locale" à loadTTF mais persistante, il faudrait quand même que tu la récupère pour ecrire avec. Donc il que tu déclare une variable à l'endroit ou tu t'en sers pour pouvoir "designer" ton objet.

Je te conseille de te documenter sur le portée et la durée de vie des variables en C. trouves toi quelques articles la dessus et lis les tranquilement. Cela te fera apprendre beaucoup de choses :oui:
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 28 Avr 2005 18:21

OK...J'ai pas tout compris mais g des lacunes en langage C ça doit être ça.
Je me documenterai concerant les locales et globales ci@o
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

segmentation fault

Messagede YuGiOhJCJ le 29 Avr 2005 01:29

Qu'est-ce que c'est que ce " segmentation fault" dont tu m'a parlé dans les messages précédents?
Je viens justement de recevoir un message du programme disant:

Matériel audio acquis.
spécifications : echantillonage : 11025, cannaux : 2, buffer : 0
Fatal signal: Segmentation Fault (SDL Parachute Deployed)

Qu'est-ce qui c'est passé? Je ne comprends plus...
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede YuGiOhJCJ le 29 Avr 2005 01:32

c bon problème résolu:
il y avait un TTF_Font *font; qui était 2 fois dans mon programme...Ca doit sûrement venir de quand j'ai essayé de mettre en locale...Ne te préoccupe pas de ce problème ;-)
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 29 Avr 2005 12:02

en general, un segmentation fault vien d'un accès à la mémoire illégal (pas toujours cependant...)

La faute la plus courante uand on débute en C c'est lutilisation d'un pointeur non initialisé... (SDL_ttf *font dans ton cas...) tu avais surement initialisé la variable globale mais pas la locale.. et quand u as utilisé font dans ta fonction, c'est la locale qui a pris le pas sur la globale.

fait attention.. dès que la taille du code augmente, ces erreurs deviennent de plus en plus difficile à trouver...
Sais-tu te servir d'un debogueur ?? (DDD ou autre)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

debogueur?

Messagede YuGiOhJCJ le 06 Avr 2006 23:16

Non jamais utilisé de "debogueur" même si je sais que ça existe...Je me sert juste d'un éditeur de texte(Vim) et d'un compilateur(gcc).
Tu utilises quoi comme débogueur?
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede Vally8 le 07 Avr 2006 00:10

bah comme debugger, le mieux, c'est le printf quand meme :D
:sors:
Moi, j'aime schtroumpfer...
Si vous voulez faire une soluce, plutôt que de m'envoyer un MP, postez-là ici (j'ai rarement le temps de répondre à tous les MP)
Avatar de l’utilisateur
Vally8
Gouroute du Site
Gouroute du Site
 
Messages: 15567
Inscription: 07 Mai 2004 18:14
Localisation: Au pays des schtroumpfs
Jeu(x) du moment: Professor Layton, Tales of Vesperia, Dragon Quest 9

Messagede Deacon le 07 Avr 2006 08:01

Vally.... :rire:
N’importe qui peut haïr l’humanité après une agression. Seuls les grands esprits la haïssent… avant.
_House
Avatar de l’utilisateur
Deacon
Drakcobo écrivain
Drakcobo écrivain
 
Messages: 20895
Inscription: 09 Mai 2005 10:17

Messagede moi1392 le 07 Avr 2006 09:33

vally8 : mouais... fais gaffe, avec des déclarations comme celle là tu risque de te voir proposer un poste chez microsoft :rire:

YuGiOhJCJ : j'utilise kdbg, si tu es sous gnome, je ne connais pas de déboguer gtk (il y en a surement un, il faut juste le chercher ;))
Sinon, dans tous les cas il y a gdb (en ligne de commande, ultra chiant pour un non habitué) et DDD (graphique mais TRES moche, il a le style des très vieilles fenetres unix)

pour pouvoir l'utiliser, il faut utiliser l'option -g avec gcc quand tu compile ET quand tu link (si tu le fais séparément)
Ensuite, tu lance ton débogueur, tu charrges l'éxecutable (l'icone avec le dossier orange dans kdbg) et à partir de là tu peux ouvrir les fichiers sources et mettre des points d'arrets ou tu veux.
Après, quand tu lance ton programme, il va automatiquement s'arreter sur les point d'arret ou à l'endroit du bug s'il plante. Tu peux alors voir la valeur de toutes tes variables, et la mémoire, dans les sous fenetre appropriées.
Tu peux aussi faire du pas à pas, entrer ou non dans les fonctions, ...

Utilise le, tu verras quand quand ton code commance à être gros, c'est très pratique et 100 fois plus rapide qu'avec des printf !
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

PrécédentSuivante

Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron