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

[C++/SDL] questions sur pong

sonic66
sonic66
Niveau 10
19 août 2005 à 15:59:49

Justement vengeur , regarde avec keystate ca marche pas! rien nest capté! j´au beau macharner sur entré ou bas ^^

  1. include < SDL/sdl.h>

Uint8* keystate;

SDL_Surface* surface;
SDL_Surface* imgpong1;
SDL_Surface* imgpong2;
SDL_Surface* imgdecors1;
int vit=0;

void init() / *Pour initialiser SDL*/
{
SDL_Init(SDL_INIT_VIDEO);
surface=SDL_SetVideoMode( 1024, 768, 32, SDL_FULLSCREEN|SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_ShowCursor(0);
imgpong1 = SDL_LoadBMP("pong.bmp");
imgpong2 = SDL_LoadBMP("pong.bmp");
imgdecors1 = SDL_LoadBMP("decors.bmp");
}

void bouger() / *Pour controler les touches*/
{
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_UP])
{
vit=vit-4;
return;
}
if(keystate[SDLK_DOWN])
{
vit=vit+4;
return;
}
if(keystate[SDLK_RETURN])
{
return;
}
}

int main(int argc, char *argv[])
{
SDL_Rect rectangle;

init();
while(1)
{
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_RETURN])
{
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

rectangle.x=0;
rectangle.y=0;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgdecors1 , NULL , surface , &rectangle);
rectangle.x=0;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong1 , NULL , surface , &rectangle);
rectangle.x=1000;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong2 , NULL , surface , &rectangle);

SDL_Flip(surface);
bouger();
}
}

sonic66
sonic66
Niveau 10
19 août 2005 à 16:01:23

plutot http://rafb.net/paste/results/9b2Ryz15.html

sonic66
sonic66
Niveau 10
19 août 2005 à 16:02:01

c´est dyno qui ma montré le keystate , sauf que ca marche pas avec moi la , et il sait pas ou est son erreur ( c lui qui ma dit de l´utiliser comme ca ^^)

sonic66
sonic66
Niveau 10
19 août 2005 à 16:05:18

J´en é marre j´ai tout testé aveckeystate!

sonic66
sonic66
Niveau 10
19 août 2005 à 16:05:56

a trouvé merci! :)

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 16:10:09

Faut conserver une boucle d´evenements...

dynoplasmma
dynoplasmma
Niveau 9
19 août 2005 à 16:12:37

Sonic,utilise differentes position !
c´est plus simple !

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 16:24:49

Dyno > Qu´est-ce que tu veut dire par " différentes positions" ?

sonic66
sonic66
Niveau 10
19 août 2005 à 16:27:52

Il veut que j´utilise plusieurs rect...

Vengeur41 Posté le 19 août 2005 à 16:10:09
Faut conserver une boucle d´evenements...

mais alors il sert a quoi keystate?

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 16:33:38

A obtenir les touches mieux que la boucle d´evenements, par exemple le multi-touche ( on peut alors tester si 2 touches sont pressées en meme temps) et c´est plus du tout " saccadé".

Moi je trouve ca plus propre et plus léger avec un seul rect.
Parce que imagine qu´il y´ait 15 sprites affichés, les rects bouffent 15x plus de mémoire...

sonic66
sonic66
Niveau 10
19 août 2005 à 16:35:14

Alors en fait , je fait ma boucle d´event comme si j´allais faire les event.type... puis j´utilise keystate? je vais voir ca !

dynoplasmma
dynoplasmma
Niveau 9
19 août 2005 à 16:36:01

Mais c´est beaucoup plus facile.
Pour un pong, il a besoin de 4 rect, docn ca doit aller.
Et ca doit pas etre trop volumineux, donc ca doit aller :ok:

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 16:38:53

Question de principe...

dynoplasmma
dynoplasmma
Niveau 9
19 août 2005 à 16:41:38

On doit pas melanger les chois et les carottes.
Faut guarder un rect pour chaque equivalent, c´est a dire :
chaque image de fond prend le rect 1, apres on done un a chaque chose differente.

sonic66
sonic66
Niveau 10
19 août 2005 à 16:47:11

non dyno ca va parfait! ca marche! :)
plus qu´un ptit truc a arranger et c´est ok! :)

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 17:03:26

Ben jvois pas où ton truc de différents rect est arrangeant dans le sens ou dans mes premiers progs je faisait comme ca et ca c´était mis à ramer et quand j´avais compris qu´on pouvait en utiliser qu´un seul, ca ramait plus du tout...

Surtout que si après tu fais une fonction comme ca :

void blitSurface(SDL_Surface *s, int x, int y)
{
SDL_Rect rcdst;
rcdst.x = x;
rcdst.y = y;
SDL_BlitSurface(s, NULL, Screen, &rcdst);
}

toutes les surfaces utiliseront le meme rect !!

JeanYvesYves
JeanYvesYves
Niveau 10
19 août 2005 à 17:06:35

si - comme moi - l´utilisation d´une structure rect vous gonfle a chaque blit, programmez vous vos propres fonctions :

void Blit(SDL_Surface* src,SDL_Surface* dest,int x,int y);
pour blitter toute l´image source sur dest, a x,y

void Blit(SDL_Surface* src,int x,int y,int w,int h,SDL_Surface* dest,int x,int y);
pour blitter une partie de l´image source sur dest.

Ces fonctions sont faciles a programmer, et vous n´aurez plus jamais a vous faire chier avec des structures de rect pour blitter...

JeanYvesYves
JeanYvesYves
Niveau 10
19 août 2005 à 17:06:57

arf ! vengeur m´a devancé :-)

sonic66
sonic66
Niveau 10
19 août 2005 à 18:21:01

Voila , depuis pas mal de temps je galere a regler un probleme que je pense je n´arriverais jamais a regler sans aider ^^

voila :

dans mon pong , quand je laisse appuyer la touche bas (ou haut) , bas le pong ne decend qu´une fois , comme si j´avais directement relaché la touche :-( ...

voila ce qui m´est venut a l´esprit pour regler ca :

if(keystate[SDLK_DOWN])
{
while(keystate[SDLK_DOWN])
{
vit=vit+4;
return;
}
}

mais ca bug :-(

je ne vois vraiment pas comment faire pour que quand on laisse appuyer la touche bas , le pong decende et ne s´arrete de le faire que j´usqua qu´on relache la touche...

http://rafb.net/paste/results/LixwPg86.html

Rikkuman4
Rikkuman4
Niveau 10
19 août 2005 à 18:36:56

par contre j´aurais une question, comment faire pour faire un saut, je veux dire, comme fait sauté une image, j´utiliserais bien :

if(keystate[SDLK_SPACE])r2.y-=20;

pour choisir la hauteur du saut, mais comment faire pour que l´image retombe directement ?
alors la j´ai pas trouvé :question:

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