CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

Giga-Nova
Giga-Nova
Niveau 9
15 septembre 2004 à 17:33:22

up

Ruffi
Ruffi
Niveau 9
15 septembre 2004 à 21:50:10

" 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]

Giga-Nova
Giga-Nova
Niveau 9
16 septembre 2004 à 12:57:44

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 :d) perso vers le bas
" haut :d) " " " 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é.

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 13:35:52

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

Giga-Nova
Giga-Nova
Niveau 9
16 septembre 2004 à 17:48:55

merci je connaisait pas " static"
c marrant l´objet va tout le temps dans la meme direction lol

JeanYvesYves
JeanYvesYves
Niveau 10
16 septembre 2004 à 17:50:53

Tu n´as pas besoin d´utiliser static :)
ça marche sans :)

Giga-Nova
Giga-Nova
Niveau 9
16 septembre 2004 à 18:09:22

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

JeanYvesYves
JeanYvesYves
Niveau 10
16 septembre 2004 à 18:23:18

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 :)

JeanYvesYves
JeanYvesYves
Niveau 10
16 septembre 2004 à 18:24:40

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

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 20:34:17

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.

Ptival
Ptival
Niveau 10
16 septembre 2004 à 21:21:17

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 !

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 21:36:51

" 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.

Ptival
Ptival
Niveau 10
16 septembre 2004 à 21:49:43

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 ? )

libjcc
libjcc
Niveau 4
16 septembre 2004 à 22:02:46

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)

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 22:05:25

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 :

  1. include < iostream.h>

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)

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 22:08:23

void fct2(){
. ..
std::cout < < std::endl < < " fin fct2" < < std::endl;
}

Oups... ereur de copier coller

Ptival
Ptival
Niveau 10
16 septembre 2004 à 22:19:12

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 ?

Ruffi
Ruffi
Niveau 9
16 septembre 2004 à 22:29:11

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

JeanYvesYves
JeanYvesYves
Niveau 10
17 septembre 2004 à 01:28:30

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.

Ptival
Ptival
Niveau 10
17 septembre 2004 à 08:11:17

Moi j´fais comme JYY, une variable globale...
C´est vrai que comme tu fais elle vire...

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware