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

SDL clavier

dynoplasmma
dynoplasmma
Niveau 9
15 mai 2005 à 22:45:15

Hello, I create a new topic because you didn´t go to my before topic whos name SDL.image.
Voila, j´espere que vous avez compri, mon anglais est pas top.
Voici le code, et j´espere que quelqu´un pourrait arranger ce code pour que cela fonctionne. :svp: La, je traine, je bloque, je suis coincé, je nepeut plus rien faire, donc ela serait sympathique de delier les liens qui m´attirent vers le gouffre.
Venons en au faite :

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Event event;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYUP)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_BlitSurface(firstscreen,NULL,screen,&1);

firstscreen=SDL_LoadBMP("barre joueur 1.bmp");
rect1.x=20;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);

{
SDL_Event event;

SDL_WaitEvent(&);

switch ( event.type)
{
case SDL_KEYDOWN:
printf("La touche %s a été préssée!\n",
SDL_GetKeyName(event.key.keysym.sym));
break;
}
}

firstscreen=SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=987;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;

SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY,SDL_Ma
pRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);

SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

C´est sous dev C++.

Il y a une image de fond nommé " aire"

Il y a une petite image a gauche au milieu nommé " barre joueur 1"

Il y a une petite image a droite au milieu nommé " barre joueur 3"

Les trois images s´affichent correctement.
Mais le problemes vient de " barre joueur 1" qui ne bouge pas comme je l´ai mit dans le code.
C´est la le probleme.

FIN : j´espere que vous avez tout lu et que vous pourez accedez a quelques modifications pour faire en sorte que tout cela fonctionne.
Cela ne prendrait qu´une infime partie de votre vie. Je vous remerci d´avance, meme si vous metter un code qui vous parait vrai et que c´est faux, mettez le quand meme.

A plus !

dynoplasmma
dynoplasmma
Niveau 9
15 mai 2005 à 22:55:20

Oh non, je me susi gourré :honte:
Bon je reformule tout,

Hello, I create a new topic because you didn´t go to my before topic whos name SDL.image.
Voila, j´espere que vous avez compri, mon anglais est pas top.
Voici le code, et j´espere que quelqu´un pourrait arranger ce code pour que cela fonctionne. La, je traine, je bloque, je suis coincé, je nepeut plus rien faire, donc ela serait sympathique de delier les liens qui m´attirent vers le gouffre.
Venons en au faite :

  1. include < SDL/SDL.h>

SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Event event;
Uint8 *keystate;
SDL_Rect rect1;
int x,y ;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
SDL_ShowCursor(0);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_ESCAPE) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_BlitSurface(firstscreen,NULL,screen,&1);

firstscreen=SDL_LoadBMP("barre joueur 1.bmp");
rect1.x=0;
rect1.y=333;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);

while(keystate)
{
SDL_FillRect(screen,NULL,0);
rect1.x=x;
rect1.y=y;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
if ( SDL_PollEvent(&) && event.type==SDL_QUIT)
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;
}

firstscreen = SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=986;
rect1.y=333;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);

SDL_Flip(screen);
SDL_FreeSurface(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

A plus !

Lapintade
Lapintade
Niveau 30
15 mai 2005 à 23:19:18

Je connais pas bien la SDL, mais la structure globale de ton code est assez cochone. Je te sugerre de tout refaire en suivant ce schema :

main
{
inits et chargement d´image
. ..
boucle
{
_Gestion des touches
_Affichage de tous les elements
_Flip ecran
}
}

Lapintade
Lapintade
Niveau 30
15 mai 2005 à 23:20:00

Si tu melange ta gestion de touche, ton affichage, tes flipecran, au final ca ressemble plus a rien, d´ailleurs ca ressemble a rien la, c´est imcomprehensible.

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 10:08:31

ok :merci: pour les renseignements lapintade, je m´y lance tout de suite.

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 10:12:09

comment cherger une image, je ne vois pas du tout.

Lapintade
Lapintade
Niveau 30
16 mai 2005 à 10:34:32

Tous les tutos de base sur la SDL expliquent comment charger une image alors :rechercher:

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 10:36:38

Ouais c´est SDL_LoadBMP("image.bmp")

Mais imaginons que j´en ai 2, pour l´afficher apres, c´est

rect1.x=0;
rect1.y=0;
rect1.w=1024;
rect1.h=768;

rect1.x=0;
rect1.y=0;
rect1.w=1024;
rect1.h=768;

Comment reconnaitre laquelle serait ou, ba ouais, bizarre.

Lapintade
Lapintade
Niveau 30
16 mai 2005 à 11:07:24

Le principe est le suivant :
Ta fonction SDL_LoadBMP te renvoie quelquechose qui est unique et propre a ton image. C´est ca que tu doit bien garder.
Le rect n´est qu´un simple parametre d´affichage, tu peux l´utiliser pour les deux.

En gros ca donne ca :

monimage1 = SDL_LoadBMP("monimage1.bmp");
monimage2 = SDL_LoadBMP("monimage2.bmp");
. ..
rect.x=0; / / Pour faire du plein ecran
rect.y=0;
rect.w=1024;
rect.h=768;
. ..
BlitImage(monImage1, rect);
BlitImage(monImage2, rect);

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 15:18:20

J´ai essayé de faire le plus possible ce que tu m´as dit, mais le x et le y ne sont pas reconnus, meme si je les placent apres :rect1.x=...

Voici tout de meme le code :

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Surface* secondscreen;
SDL_Surface* thirdscreen;
SDL_Event event;
Uint8 *keystate;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(1);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_ESCAPE) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
secondscreen = SDL_LoadBMP("barre joueur 1.bmp");
thirdscreen = SDL_LoadBMP("barre joueur 2.bmp");

while(keystate)
{
rect1.x=x;
rect1.y=y;
if ( SDL_PollEvent(&) && event.type==SDL_QUIT)
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;

rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_FreeSurface(screen);
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
}

waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

Et je ne veux pas metre toutes les images a la meme dimensions.

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 15:26:08

J´ai trouvé le probleme du x inconnu, voici le nouveau code :

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Surface* secondscreen;
SDL_Surface* thirdscreen;
SDL_Event event;
Uint8 *keystate;
int x,y;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(1);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_ESCAPE) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
secondscreen = SDL_LoadBMP("barre joueur 1.bmp");
thirdscreen = SDL_LoadBMP("barre joueur 2.bmp");

while(keystate)
{
rect1.x=x;
rect1.y=y;
if ( SDL_PollEvent(&) && event.type==SDL_QUIT)
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;

rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_FreeSurface(screen);
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
}

waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

Par conntre l´ecran est tout noir, donc quel est le probleme, aucune idee!

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 15:55:53

Mister guinea fowl, je doute que cette facon d´ecrire ce programe fonctionne, aficher les images dans une boucle, bizarre, bizarre.
Sinon, j´ai enlevé une ligne inutile :

if ( SDL_PollEvent(&) && event.type==SDL_QUIT)

et dans while(keystate)
J´ai mit keystate comme cela, doncpeut etre que le probleme vient de cela.

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 16:11:52

J´ai rajouté les blits oubliés, mais cela ne change rien, tjs un ecran noir, je pense que ce programme ne marchera pas tant que l´affichage des images et les blit sont dans le boucle.
Je vais afficher les deux programmes differants pour que tu vois tout :

Premier programme, celui que tu me conseilles de faire :

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Surface* secondscreen;
SDL_Surface* thirdscreen;
SDL_Event event;
Uint8 *keystate;
int x,y;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(1);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_ESCAPE) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
secondscreen = SDL_LoadBMP("barre joueur 1.bmp");
thirdscreen = SDL_LoadBMP("barre joueur 2.bmp");

while(keystate)
{
rect1.x=x;
rect1.y=y;
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;

rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_FreeSurface(screen);
SDL_BlitSurface(firstscreen,NULL,screen,&1);

SDL_BlitSurface(secondscreen,NULL,screen,&1);

SDL_BlitSurface(thirdscreen,NULL,screen,&1);
SDL_Flip(screen);

}

waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

__________________________________________

Deuxiemeprogramme, celui que je trouve bon de faire :

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Surface* secondscreen;
SDL_Surface* thirdscreen;
SDL_Event event;
Uint8 *keystate;
int x,y;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(1);
}

void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_ESCAPE) return;
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();

firstscreen = SDL_LoadBMP("aire.bmp");
secondscreen = SDL_LoadBMP("barre joueur 1.bmp");
thirdscreen = SDL_LoadBMP("barre joueur 2.bmp");

rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;

SDL_SetColorKey(secondscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(secondscreen->format,255,0,255,0));
SDL_SetColorKey(thirdscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(thirdscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);

SDL_BlitSurface(secondscreen,NULL,screen,&1);

SDL_BlitSurface(thirdscreen,NULL,screen,&1);
SDL_FreeSurface(screen);
SDL_Flip(screen);

while(keystate)
{
rect1.x=x;
rect1.y=y;
keystate=SDL_GetKeyState(NULL);
if ( keystate[SDLK_DOWN])y++;
if ( keystate[SDLK_UP])y--;
}

waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

Mais dans le deuxieme programme, toutes les images se superposent, c´est le probleme de mettre qu´un rect1...

Lapintade
Lapintade
Niveau 30
16 mai 2005 à 16:30:08

Il faut que tu regarde un tuto SDL qui te montrera comment faire une boucle d´affiche et comment dans cette boucle tester les touches.

Il y a du progrés dans ton code, mais c´est pas encore bien. Tu bloques tout pour tester des touches et ca marche pas comme ca.

Quand j´aurais le temps, j´installerais DevCpp et j´essaierai de t´aider. D´ici la explique moi ce que tu veux faire. ( parcque c´est pas normal d´ecrire 170 programmes pour afficher 3 images).

As tu lu un tutos C/C++ ( au moins le debut) ? ou tu ecrit tout un peu au hasard et n´importe comment ?

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 16:35:24

Non, j´ai lu les premiers tutos de JYY.
En fait, j´aimerais faire un pong(je suis loin du compte).

J´affiche une image de fond.
Une barre a gauche.
Une barre a droite.

Et je veuxapprendre a faire bouger les barres de haut et de bas.

Pour la balle, j´ai un tuto de JYY, sur cela.

Pour les collisions, aucunes idee pour l´instant, mais je verrai par la suite.

Quand j´aurais terminer cela, je ferais un menu, et 5 mode different de pong.

En tout cas, c´est sympa de m´aider.

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 17:23:00

Et personne d´autres qui utilise SDL et qui maitrise pourrait m´aider ?
Regarder, j´ai aider quelqu´un hier :
https://www.jeuxvideo.com/forums/1-31-8390493-1-0-51-0-0.htm

J´avais eu le meme probleme et j´avais galéré une semaine.

Neofungamer
Neofungamer
Niveau 22
16 mai 2005 à 18:46:53

Moi je fais un pong mais j´utilise pas la SDL dsl

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 18:57:30

Et tu utilises quoi neofunger :question:

dynoplasmma
dynoplasmma
Niveau 9
16 mai 2005 à 19:09:54

Je sais que Vengeur41 utilise la SDL, et JYY aussi, et pour les autres, je ne sais pas.

Lapintade
Lapintade
Niveau 30
17 mai 2005 à 14:07:13

dynoplasmma > Plutot que de faire des up inutiles, si tu continuais a travailler, lire des tutos et continuer a comprendre comment tout ca ca marche.

Tu sais la programmation, c´est pas un truc qu´on va t´expliquer ligne par ligne et tu tu viendrais faire des sempiternels up pour qu´on t´explique comment ca marche. Depuis le temps, t´aurais deja du resoudre ton probleme et avancer dans ton pong.

Quand tu as un gros probleme, decoupe le en petit probleme. Dans ton cas present, tu dois faire ce que je t´ai dis :
- apprendre a faire une boucle de jeu
- apprendre a tester les touches du clavier
- apprendre a charger une puis plusieurs images
- apprendre a afficher des images.

Toi t´essais de tout faire en meme temps et tu pleure parcque y a rien qui marche et t´attends qu´on te corrige ton truc en faisant des up.

Allez au boulot !

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