MERCI POUR LE SITE!! Grâce à lui, ça marche! Merci beaucoup!
le mien de nullissimo :
http://www.libsdl.org/cgi/docwiki.cgi/SDL_20API
Si tu connait tout ca sdl n´a plus de secret pour le connaisseur de ca ?
int & n´a pas de sens ( pour l´instant).
une variable est soit une valeurs :
type var;
soit une référence ( pointeur) vers une valeurs :
type *var
( Je simplifie, mais c´est pour l´explication).
quand un a une variable, quelque soit son type, & est l´adresse de la variable.
et *var est la valeur de la variable qui se trouve à l´adresse contenu dans var. Bien sur, si la variable n´est pas un pointeur le compilo ne vous laissera pas écrire *var.
donc int& n´est pas un type de donnée.
Lorsque vous appeler une fonction. Vous pouvez soit lui donner la valeur de la variable :
int f1(int var)
{
. ..
}
auquel cas lorsque vous faites f1(5) ou f1(a) var prend la valeur 5 ou celle de a dans la fonction, mais si vous modifier var, a n´est pas modifier.
Par contre vous pouvez donner à la fonction non pas la valeur mais l´adresse de la variable :
int f2(int* var)
{
. ..
}
auquel cas lorsque vous appellez la fonction vous devez faire : f2(&) pour dire que c´est l´adresse de a et non a lui même que vous donner à la fonction.
Dans la fonction lorsque vous avez besoin de la valeur de a vous faite *var ce qui donne la valeur stocker à l´adresse contenu dans var ( et on se souvient que var contient l´adresse de a) Donc si vous modifier *var alors a sera modifié par exemple en faisant :
Et enfin vous pouvez déclarer une fonction comme ça :
int f3(int& var)
{
. ..
}
et seulement ici vous pouvez écrire ça. Cela veut dire que vous allez écrire tout comme si vous aviez déclarer f1 : vous appeler la fonction avec f3(a) mais par contre ce qui va se passer c´est que si vous modifier var alors a va se modifier. En gros ça ne sers à rien de mieux que la deuxième forme c´est juste une simplification de l´écriture ( qui est apparue avec le C++ je crois).
int & n´a pas de sens ( pour l´instant).
-> Que ce soit en C ou en C++
Mais :
int & = b;
A un sens en C++ !
voila j´ai une petite question sur la lecture dans un fichier.
mon fichier est ouvert
si je fait
fscanf(monfichier,"\n");
est-ce que ça deplace le curseur sur la ligne suivante du fichier?
un peu dans le meme genre que le readln en pascal
fscanf est un peu comme le readln, mais pas que ça : non seulement il s´arrete aux sauts de ligne mais aussi aux espaces :
Je te laisse regarder mon tuto : chapitre F.1.2.
http://perso.numericable.fr/~fvirtman/info/tuto/index.html
pour le scanf
apres, pour le fscanf, c´est pareil ![]()
salut!
Ta pas des Tutos pour pur novice lol! Je direr même pour noob ? :questions: merci d´avance
Pour mon débat avec dnob700 d´un peu plus haut quelqu´un peut appuyer une des deux thèses que je sache si je dis des conneries ou pas ? ![]()
tadada > regarde mon tuto, message juste avant.
ptival >
int & = b;
je n´ai jamais utilisé ça. ça compile ? ( j´ia la flemme de lance le compilo ce soir)
ça crée une sorte de pointeur en toute logique ? ( et donc si tu modifies a, ça modifie b)
mwé. Je prefere utiliser des pointeurs dans ce cas, mais je veux bien croire que ça marche, demain je ferai un test ![]()
oui oui ça compile
int b = 0;
int & = b;
++a;
/ / a " vaut" 1, b vaut 1
En fait je pense que c´est ce qui se passe implicitement dans la syntaxe :
mafonction(int &){]
si je fais mafonction(b) ça fait " int & = b"...
Enfin c´est pas très clair ce que je dis
Sinon JYY si tu ( re)passes par là j´aimerais savoir si tu as réussi à faire une ColorKey pour une texture OpenGL par SDL et si tu pouvais m´y aider ?
Faut-il gérer la ColorKey dans la surface SDL avant le glTexImage2d ? Quel flag mettre dans glTexImage2d ?
Faut-il gérer cela avec OpenGl ? Quelle fonction utiliser ?
petite question, tu connais le moteur 3D: Ogre3D ? si oui , tu pourras peut être m´aider...
Merci j´ai lu ton tutos sur scanf...
mais je voudrait savoir si je peus passez a la ligne suivante d´un fichier texte sans avoir a rechercher " manuellement" le caractère \n.
exemple je lit des infos dans un texte et si la ligne commence par # alors c´est que c´est une ligne de commentaire et donc, sans connaitre sa longueur, je veux passer a la ligne suivante.
je peux evidement mettre
while ( fgetc(montexte,c)!=\n)
ce qui j´immagine va avancer le curseur dans le texte caractère par caractère puis s´arreter a la suite du premier retour a la ligne rencontré.
mais vu que je ne vais pas me servir de ce que contient cette ligne je ne voudrait pas utiliser une variable rien que pour sauter une ligne.
donc je voudrait savoir si, a la maniere de freadln, fscanf(montexte,´\n´) permet de sauter la ligne sans se préocuper de ce qui s´y trouve...
mecrci
guyver2 > utilise :
fscanf(F,"%1000[^\n]s",buf);
pour faire un beau readln ( je te laisse voir le tuto pourquoi)
pour vérifier si la ligne commence par # ou pas, c´est simple, APRES le fscanf, tu regardes si buf[0] == ´#´
n´oublie pas d´allouer buf a 1000 octets dans l´exemple.
acidoangel > désolé, je ne connais ogre que de nom. Mais c´est vrai que ça a l´air super.
Ptival > l´astuce pour mettre une colorkey dans OpenGL, c´est de jouer sur le canal alpha :
Assure toi que tes images sont en profondeur 32 bits ( ma fonction LoadImage de mes tutos SDL permet cela)
Ensuite, joue dessus : quand tu es encore sous une SDL_Image ( avant d´y monter en texture pour openGL), fait des getpixels/putpixels : fait une fonction qui dit, par exemple, de mettre 255 pour le alpha si le pixel est noir, et 0 s´il est blanc.
Tu définis ainsi facilement un masque en te servant du alpha channel.
Ensuite, monte la texture dans OpenGL.
Puis fait :
glEnable(GL_ALPHA_TEST);
et définis :
glAlphaFunc(GL_LEQUAL,128);
qui veut dire que le pixel est affiché si et seulement si la valeur alpha du pixel lu est < = ( Less or Equal) 128, autrement dit, ça ne t´affichera pas ce que tu as défini en 255, a savoir le bord
Si tu te fais une fonction qui fait ça, tu simules facilement le ColorKey.
Le canal alpha est donc une astuce pour le simuler ![]()
Tu pourrais aussi utiliser glBlend si tu voulais te servir du canal alpha pour faire de la transparence, mais ça chie un peu avec le Z-buffer dans certains cas, bref... glAlphaFunc t´aidera pour la COlokey ![]()
" de mettre 255 pour le alpha si le pixel est noir, et 0 s´il est blanc"
correction :
de mettre 255 pour le alpha si le pixel est de la couleurkey que tu as choisi, et 0 sinon.
( ainsi la canal alpha défini le masque du sprite)
Ouais faudra que je me penche un peu dessus ça a pas l´air simplissime
Surtout que j´ai du mal à me faire une idée de ce qui se passe en mémoire avec les commandes OpenGL :\
Pour l´instant j´ai mis un canal Alpha dans mon PNG et j´ai juste balancé un :
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_COLOR);
glEnable(GL_BLEND);
Ca fera l´affaire en attendant que je code ma fonction ( pour réduire les images, pcque l´alpha dans l´image ça bouffe en mémoire)
ne fait pas de glblend ! ça c´est pour la transparence...
fait un glalpha : c´est un " je te vois ou pas", c´est beaucoup plus rapide.
lol, ouais j´m´y mets dessus, j´vais relire ton message et commencer à bosser ça xD
Je tiens le bon bout
Je pense que je vais y arriver, merci à godrik pour mon éducation sur le décalage bit à bit
Sinon dans la rubrique " Copier/Coller saymal", je citerai JYY qui dans le tuto 2_1_03_balle.cpp a écris :
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); / / cree une image en VRAM
( ...)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); / / cree une image en VRAM
Vous aurez bien sur compris qu´à la seconde ligne c´est en RAM et pas en VRAM ; )
oups
je viens de corriger ![]()
>JYY
fscanf(F,"%1000[^\n]s",buf);
pour faire un beau readln ( je te laisse voir le tuto pourquoi)
pour vérifier si la ligne commence par # ou pas, c´est simple, APRES le fscanf, tu regardes si buf[0] == ´#´
n´oublie pas d´allouer buf a 1000 octets dans l´exemple.
ça je sais faire mais moi je voudrait sauter une ligne sans alouer de la memoire pour un truc qui ne servira a rien.
il n´y a pas une fonction du genre FSeek. qui permet de se positionner sur la ligne suivante?
je ne connait que
SEEK_SET ( égale à 0) : début du fichier ;
SEEK_CUR ( égale à 1) : position courante ;
SEEK_END ( égale à 2) : fin du fichier.
bon si il n´y a pas d´autre moyen que de lire tout les caracteres d´une ligne pour passer a la suivante je vais faire comme toi.
question subsidiaire:
si je met
fscanf(F,"%1000[^\n]s");
sans variable a modifier est-ce que ça peut compiler correctement ( j´imagine que oui)?
ça me permeterais de lire jusqu´a 999 caractères sans avoir a les enregistrer dans une variable.
OUI/NON???
et merci