up
" mais des que je fais droite ou gauche l´imge tourne dans un sens ou dans l´autre"
1) C´est pas comprehensible...
2) Comme dit Ptival, il faut que tu essaie de trouver l´érreur par toi meme. Ce n´est pas une interogation écrite, mais tu n´es pas a l´ecole : Il faut que tu aprenne à te debrouiller seul.
3) Encore comme dit aussi Ptival : " Et c´est le mauvais sens ? " J´ai pas compris ton probleme, mais peut-etre que tu a juste inversé perso[0] avec perso[2]
j´ai trouvé tout seul comme un Grand ( lol)
c cette ligne qui foirait
SDL_BlitSurface(perso[20%4],NULL,screen,&1);
SDL_BlitSurface(perso[4],NULL,screen,&1);
et en modifiant les if je suis arrivé a ca
touche bas
perso vers le bas
" haut
" " " haut
ect...
mais le dilème c que: quand j´apuie sur une touche on voit le perso mais dès que je lache on ne voit plus rien
je crois que c du a l´absence d´image initialisé.
une solution a ton probleme :
------------------------
static int sens_deplacement=0;
if(event.key.keysym.sym == SDLK_RIGHT)
{
rect1.x+=1;
sens_deplacement=0;
}
if(event.key.keysym.sym == SDLK_UP)
{
rect1.y-=1;
sens_deplacement=1;
}
if(event.key.keysym.sym == SDLK_LEFT)
{
rect1.x-=1;
sens_deplacement=2;
}
if(event.key.keysym.sym == SDLK_DOWN)
{
rect1.y+=1;
sens_deplacement=3;
}
SDL_BlitSurface(perso[sens_deplacement],NULL,scree
n,&1);
---------------------
Au cas ou tu ne connaisse pas le mot clé static :
http://www.allprog.com/CPlusPlus/Static.htm
merci je connaisait pas " static"
c marrant l´objet va tout le temps dans la meme direction lol
Tu n´as pas besoin d´utiliser static ![]()
ça marche sans ![]()
oh JY² le dieu de la prog est la ( il va pouvoir m´aider)
comment on fait pour faire partir la couleur blanche du fond d´img
SDL_SetColorKey(perso[4],SDL_SRCCOLORKEY , SDL_MapRGBA(perso[4]->format,250,0,250,0));
SDL_SetAlpha(perso[4],SDL_SRCALPHA,250);
( quelque chose comme ca non ? )
Question 2;
j´ai une image de fond mais mon perso peut sortir de l´img par la droite et le bas
comment remedier a cela ! !!
HELP
SDL_SetColorKey(perso[4],SDL_SRCCOLORKEY , SDL_MapRGBA(perso[4]->format,255,255,255,0));
( si c´est du blanc pur, c´est 255,255,255)
il faut faire ça pour chacune de stes images ( fait un for pour éviter les copier/coller)
pour que ton perso ne sorte pas, a toi de lui interdire de sortir
genre au lieu de faire :
if(event.key.keysym.sym == SDLK_UP)
{
rect1.y-=1;
sens_deplacement=1;
}
tu fais :
if(event.key.keysym.sym == SDLK_UP)
{
if ( rect1.y>0)
{
rect1.y-=1;
}
sens_deplacement=1;
}
et pareil pour les autres directions ![]()
en gros, ça veut dire :
" si tu appuies sur haut, et que ton bonhomme n´est pas sur le bord haut, alors monte"
dans tous les cas comme tu vois, meme si tu ne peux pas monter, le sens_deplacement=1 est appliqué : pour que ton gars regarde quand meme en haut !
mais si tu ne veux pas, tu peux tres bien inserer ça dans l´autre if. ( et en ce cas, tu peux rassembler les if avec un &&)
enfin C toi qui controle ![]()
Evite le SDL_SetAlpha: je l´ai mis dans mon tuto pour montrer que ça existe ( ça sert a faire des " fantomes") mais SDL y gere mal pour l´instant : ça ralentit tout.
donc tu mets juste le SDL_SetColorKey
JYY > Pas besoin du static ?
Mais si il n´apuis sur aucune touche, il va prendre une position par defaut ( 0) qui n´est pas forcement celle souhaité. Le personage se remetra en position 0 apres tout deplacement...
Avec static, il gardera l´anciene valeur lors du prochain passage, ce qui permetra d´afficher le personage dans la meme position que durant son deplacement.
Ruffi -> Pas du tout !
Regarde, ton code teste si une touche est appuyée, et entre une valeur à une variable si c´est le cas.
Mais si on appuie sur rien, aucune des conditions n´est vérifiée, et donc la variable n´est pas modifiée, elle vaut toujours son ancienne valeur.
La variable n´est pas remise à 0 à la fin de la boucle !
" elle vaut toujours son ancienne valeur" : faux, car la duré de vie de la variable est limitée. D´où le principe de la variable static qui permet de garder la valeur pour chaque apel de la fonction.
A la fin de la porté de la variable, celle-ci est detruite. Sa valeur est donc perdue.
Au moment où le programme repassera dans cette fonction, la variable sera recréée et initialisée à 0.
Et t´as vu ça où ? :?:
int variable = 0;
while ( variable < 10 )
{
variable += 1;
}
Selon toi cette boucle est infinie ? ( C´est quoi la durée de vie d´une variable ? Le temps de l´éxécution du programme non ? Et si on récupère son adresse mémoire on doit même pouvoir le récupérer plus tard s´il ne s´est pas fait remplacer...non ? )
Bon c la rentrée j´essye de m´y remmetre
je suis devant un grave probleme
J´essaye de faire un stratego avec la lib SDL
pour cela j´affiche tt les piece
Mais l´ordi en blit maximum 79 Pourkoi ?
pourtant ca ne devrais pas etre un prob de memeoire les image sont assez légere
Bref c´a m´énerve
( HELP)
La duré de vie de la variable, c´est la duré de vie durant laquel elle existe : a la fin de ta fonction, si ta variable est de type auto ( le type par defaut de toutes les variables), ben elle est detruite. Si elle est de type static, elle n´est pas detruite et tu peut l´utiliser lors du prochain apel de fonction.
Recuperer son adresse memeoir ? Vu que tu n´a pas créé toi meme l´espace memoir via un new ou un malloc, je pense pas que tu puisse recuperer la valeur.
petit exemple :
void fct1(){
int variable1 = 0;
while ( variable1 < 10 )
{
variable1 += 1;
std::cout < < variable1 ;
}
std::cout < < std::endl < < " fin fct1" < < std::endl;
}
void fct2(){
static int variable2 = 0;
while ( variable2 < 10 )
{
variable2 += 1;
std::cout < < variable2 ;
}
std::cout < < std::endl < < " fin fct1" < < std::endl;
}
void main(){
fct1();
fct1();
fct2();
fct2();
}
-----------------
tu vera affiché :
12345678910
fin fct1
12345678910
fin fct1
12345678910
fin fct2
fin fct2
( si je me trompe pas, j´ai pas un compilo dans la tete)
void fct2(){
. ..
std::cout < < std::endl < < " fin fct2" < < std::endl;
}
Oups... ereur de copier coller
Ah mais tu parle des variables locales !
Moi je pensais qu´il parlait de variables qu´il utilisait dans sa main()...
libjcc ->
C´est bizarre, tu es sur que toutes tes objectgraph[x][y] ont des bonnes valeurs ?
Ou que par exemple, deux images sont pas blittées l´une sur l´autre ?
meme :
si tu fait un jeu, t´a une boucle infini :
while(jeu_pas_fini){
. ..
int variable = 0;
while ( variable < 10 )
variable++;
. ..
}
au moment ou il arive a l´acolade fermante, il suprime toutes les varible créées depuis l´acolade ouvrante a laquele il est lié.
enfin, le mieux pour expliquer, c´est un bon coup de google :
http://emmanuel-remy.developpez.com/C++/PorteeVariables/PorteeVariables.htm
Oui, je vois maintenant pkoi tu utilises static, dans ce cas la, mais j´étais pas dans la meme vision :
Mais je dirais que ce n´est pas l´idéal, car ce que tu fais, c´est juste " camoufler une variable globale"
moi ce que j´aurais fait, c´est soit y mettre en globale, soit de toute façon y intégrer dans une structure qui défini le statut du sprite, structure publique ( globale) ou alors passée par référence.
Mais je trouve ça laid de faire un static, car si jamais tu as plusieurs sprites dans ton jeu : ça ne marche pas : chaque appel écrasera le précédent...
Enfin toute une histoire de structuration.
Moi j´fais comme JYY, une variable globale...
C´est vrai que comme tu fais elle vire...