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] Solution à mon code ?

[-ImBack-]
[-ImBack-]
Niveau 7
06 mai 2012 à 00:08:50

Bonjour/Bonsoir tout le monde !

Je ne vais pas y passer par 4 chemins, voici mon problème:

1er : Je charge mon image de balle d'AK47, qui doit apparaître et avancer lorsque qu'on appuie sur le bouton gauche de la souris. Or, elle apparaît déjà lorsque qu'on lance le jeu.

2ème: Non seulement, la balle d'AK 47 apparaît au début du programme, mais en plus, elle apparaît 2 fois à l'écran ! (En bas et en haut)

3ème: Je ne peux tirer qu'une seule balle.

4ème: Dès que je bouge ma souris, la balle se fige.

Auriez-vous une solution s'il vous plait ?

Code:

  1. include <stdlib.h>
  2. include <stdio.h>
  3. include <SDL/SDL.h>

int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *perso = NULL, *ImageDeFond = NULL, *balle = NULL;
SDL_Rect positionPerso, positionFond, positionBalle;
SDL_Event event;
int continuer = 1;
int tempsPrecedent = 0, tempsActuel = 0;

positionFond.x = 0;
positionFond.y = 0;

SDL_Init(SDL_INIT_VIDEO);

ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Gestion du temps en SDL", NULL);

ImageDeFond = SDL_LoadBMP("Nuit.bmp");
balle = SDL_LoadBMP("Balle.bmp");
SDL_SetColorKey(balle, SDL_SRCCOLORKEY, SDL_MapRGB(balle->format, 0, 0, 0));
perso = SDL_LoadBMP("CNAK.bmp");
SDL_SetColorKey(perso, SDL_SRCCOLORKEY, SDL_MapRGB(perso->format, 0, 0, 0));

positionPerso.x = ecran->w / 2 - perso->w / 2;
positionPerso.y = ecran->h / 2 - perso->h / 2;
positionBalle.x = ecran->w / 2 - perso->w / 2;
positionBalle.y = ecran->h / 2 - perso->h / 2;

SDL_EnableKeyRepeat(1000, 1000);

while (continuer)
{
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;

case SDL_KEYDOWN:
switch(event.key.keysym.sym)

{

case SDLK_ESCAPE:
continuer = 0;
break;

case SDLK_LEFT:
positionPerso.x--;
break;

case SDLK_RIGHT:
positionPerso.x++;
break;

}
break;

case SDL_MOUSEBUTTONUP:
if(event.button.button == SDL_BUTTON_LEFT)
{
tempsActuel = SDL_GetTicks();
if (tempsActuel - tempsPrecedent > 0)
{
positionBalle.x++;
tempsPrecedent = tempsActuel;
}
}
break;
}

SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(ImageDeFond, NULL, ecran, &positionFond);
SDL_BlitSurface(balle, NULL, ecran, &positionBalle);
SDL_BlitSurface(perso, NULL, ecran, &positionPerso);
SDL_Flip(ecran);
}

SDL_FreeSurface(perso);
SDL_FreeSurface(ImageDeFond);
SDL_Quit();

return EXIT_SUCCESS;
}

Merci d'avance ! :-)

Coucou, tu veux voir mon argent ?
¯¯\/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
:hap:

Poneymovez
Poneymovez
Niveau 9
06 mai 2012 à 15:16:59

Salut.
Je n'y connais rien du tout en C mais je pense que le problème viens de là :
if (tempsActuel - tempsPrecedent > 0)
{
positionBalle.x++;
tempsPrecedent = tempsActuel;
}

Le truc c'est que tu demande dès que tu clics sur le bouton de faire bouger la position de balle de 1 pixel.
Il faudrait donc que tu fasse un tableaux pour enregistrer toutes les balles, que tu parcours ton tableaux tout le temps et tu supprimes toutes les balles en fonction de conditions.

Ensuite : Il faudrait que tu fasse une boucle / fonction pour faire bouger la balle que tu appelles dès que le joueur appuie sur le bouton de la souris :

fonction bougerBalle(int balle) {
// balle correspond à l'id de la balle dans le tableaux

//ici tu parcours le tableaux en fonction de l'id de la balle

while(continue){
balle.x++;
}
}

ça donneras quelque chose dans ce genre.

Encore une fois : Je n'y connais rien, je t'ai donné le principe, essaie de le mettre en application :hap:

Triple14
Triple14
Niveau 10
07 mai 2012 à 19:25:25

Tu utilise PollEvent ; ça veut dire que si aucun event n'est détecté, hé bien le programme n'attend pas l'utilisateur pour continuer, donc le code qui suit le case button left dans ta boucle while est lu quand même.

Essaie avec WaitEvent à la place de PollEvent.

Pour l'image qui se fige quand tu bouges ta souris, je comprend pas car tu n'as pas de case mousemotion. Tu as vérifié si tes switch étaient bien placés? (je suis débutant en programmation donc voilà)

[-ImBack-]
[-ImBack-]
Niveau 7
07 mai 2012 à 21:41:31

Si je mets WaitEvent, la balle ne bouge plus car j'ai un timer :)

Coucou, tu veux voir mon argent ?
¯¯\/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
:hap:

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