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++

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 17:26:34

Sinon, j´ai un autre probleme pour mes collisions, je ne le comprend pas d´ailleurs.

(Pong) Pour l´instant, mes collisions balle/raquette, fonctionnent. Des que la balle entre en contact avec la raquette, sensY = -sensY, puis, balle->+=5*sensY.

Le probleme de cette methode, peu importe l´endroit ou l´on frappe avec la raquette, ca renvoit toujours la meme valeur... Pas tres interressent, car pas de tactiques...

J´ai reflechit un peu, j´ai trouvé asser vite :
vitesseBalleY = (milieuBalle - milieuRaquette) * FACTEUR;

Donc, si la balle est en haut de la raquette, son milieu a la coordonné 100 disons, le milieu de la raquette coordonné 150, 100 - 150 * FACTEUR= -50 * FACTEUR, et pour l´invarse, ca marche aussi.

Je me dit, pas de probleme ca va marcher, ya plus qu´a mettre ca en place.
Une fois mit en place, la balle n´a fait que partir en bas toujours a la meme vitesse...

J´ai tout essayé, rien a faire, je suis donc revenu a la premiere methode, pour trouver peu etre une autr solution, plus tard.

Si vous avez une idee, de comment faire fonctionner ma methode, ou une auter methode, je vous en remercie :)

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 17:28:17

kikou81 -> wall ton code :)

kikou81
kikou81
Niveau 9
31 mai 2006 à 18:12:35

Voici mon code :

/*
Main.c
--------------
Commencé le 27/05/06
Par kikou81,
HELLFIRE

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

int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *imageDeFond = NULL
, *imageDeFonddeux, *jack;//Declaration des surface
SDL_Event evenement;
int continuer = 1;
SDL_Rect positionDeFond;//Pour la position du
menu
positionDeFond.x = 0;
positionDeFond.y = 0;
SDL_Rect positionJack;//Position de Jack
positionJack.x = 25;
positionJack.y = 33;
SDL_Rect positionBackground;//Position de l´ar
riere plan
positionBackground.x = 0;
positionBackground.y = 0;
SDL_Init(SDL_INIT_VIDEO);//Inisialisation de l
a SDL
ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWS
URFACE | SDL_DOUBLEBUF);//Double buffering pour optimisation du réalisme
SDL_WM_SetCaption("HellFire", NULL);//Titre de
la fenetre

/* Chargement d´une image Bitmap dans une surface( */
imageDeFond = SDL_LoadBMP("menu.bmp");//Menu d
u debut
imageDeFonddeux = SDL_LoadBMP("background.bmp"
);//Background fin
jack = SDL_LoadBMP("jack.bmp");
SDL_SetColorKey(jack, SDL_SRCCOLORKEY, SDL_MapRGB(jack->format, 255, 255, 255));

/* On blitte par-dessus l´écran */
SDL_BlitSurface(imageDeFond, NULL, ecran, &positionDeFond);
//Pour le deplacemment
SDL_EnableKeyRepeat(10, 10);
//C´est un peu pour mettre en pause le program
me,
while (continuer)
{
SDL_WaitEvent(&evenement); /* Récupèration de l´évènement dans event */
switch(evenement.type) /* Test du type d´évènement */
{
case SDL_QUIT: /* Si c´est un évènement de type "Quitter" */
continuer = 0;
break;
case SDL_KEYDOWN:
switch(evenement.key.keysym.sym)
{
case SDLK_h :
SDL_BlitSurface(jack, NULL, ecran, &positionJack);
SDL_BlitSurface(imageDeFonddeux, NULL, ecran, &positionDeFond);

SDL_Flip(ecran);
break;
case SDLK_RIGHT :
positionJack.x++;
break;
case SDLK_LEFT :
positionJack.x--;
break;
case SDLK_UP :
positionJack.y--;
break;
case SDLK_DOWN:
positionJack.y++;

}

break;

}
SDL_FillRect(ecran, NULL, 0);
SDL_BlitSurface(imageDeFonddeux, NULL, ecran, &positionDeFond);
SDL_BlitSurface(jack, NULL, ecran, &positionJack);
SDL_Flip(ecran);
}
//On libere la memoire de toute les surface cr
éée
SDL_FreeSurface(ecran);
SDL_FreeSurface(imageDeFond);
SDL_FreeSurface(imageDeFonddeux);
SDL_FreeSurface(jack);
SDL_Quit();

return EXIT_SUCCESS;
}

Le probleme est que ca maffiche directemment imageDeFonddeux + Jack sans mafficher imageDeFond(ou tres rapidement) voila merci beaucoup.

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 18:30:28

Quelques commentaires sur ton code :

1/Rect pour l´image de fond
SDL_Rect imageDeFond = inutile :
SDL_BltiSurface(imageFond, NULL, ecran, NULL);

2/Utilisation de plusieurs rect
N´en utilise qu´un seul :
rect.x=50, rect.y=25;
SDL_BltiSurface(image, NULL, ecran, &rect);
rect.x=250, rect.y=76;
SDL_BltiSurface(image2, NULL, ecran, &rect);
...
PS : Si tu a des valeurs qui se conservent et qui change, exemple la coordonné X d´une balle, tu te fait une variable balle_x, et apres rect.x=balle_x

3/Ordre d´affichage
SDL_BlitSurface(jack, NULL, ecran, &positionJack);
SDL_BlitSurface(imageDeFonddeux, NULL, ecran, &positionDeFond);
Non ! Affiche d´abord ton image de fond !

4/SDL_FillRect(...)
Il faut le mettre au debut de la boucle, et si tu met une image de fond, il est inutile.

5/SDL_EnableKeyRepeat(10, 10);
Ca c´est pour la frequence d´attente entre tes evenements, il me semble, pour une attente, faut utiliser SDL_Delay(nombre); nombre en milliseconde.

La remarque 5 pour corriger ton probleme, les auters pour ameliorer ton code, normalement ce que j´ai dit est correct.

kikou81
kikou81
Niveau 9
31 mai 2006 à 18:59:26

SDL_EnableKeyRepeat(10, 10); c´est pour activer la repetition des touches ca fait que au lieu de taper comme un malade sur ton clavier ca tape "automatiquement" et je ne vois pas en quoi ca peut m´aider a corrifer mon probleme, j´ai tester de le remplacer par SDL_Delay() et sa na pas marché!
Tu n´as pas une autre solution(je n´ai pas tester toute les autres "améliorations" que tu mas dit.)??

Meci encore,

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 19:05:04

Utilisation de SDL_GetTicks();

//Au debut du programme
int tempsActuel=0, activerBoucle=0;

tempsActuel = SDL_GetTicks();
if(tempsActuel > 100)
{
activerBoucle=1;
}

if(activerBoucle==1)
{while(continuer)
{

...

}}

Cette methode marche.

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 19:07:34

J´ai oublier de preciser que SDL_GetTicks() correspond a une valeur qui s´increment automatiquement chaque millisaconde, elle doit surement commencer a 0 au debut du programme.

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 19:17:11

Yep !
J´ai reussi a donné une bonne valeur a vitesseBalleY, c´eait le facteur et l´oublie de parenthese (pour delimiter les milieux) qui deconnait apparemment :

vitesseBalleY = ( (balle_y+25) - (raquette_y[0]+45) ) / 5;

kikou81
kikou81
Niveau 9
31 mai 2006 à 19:20:55

J´ai tester ca ne marche toujours pas, le menu saffiche toujours a la vitesse de l´eclair...
Je ne vois pas pourquoi :snif:

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 19:53:23

je t´ai fait le code :
http://wall.wouf.biz/?voir;2283

Au lieu d´afficher des couleurs, tu affiches tes images :)

kikou81
kikou81
Niveau 9
31 mai 2006 à 20:02:18

Je n´y comprend rien ya pas mal de truc que je ne connais pas, je vais continuez comme je fais comme ca je dirai"´c´est moi qui l´ai fait!" mais tu ne vois pas dou provient lerreur de mon code?

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 20:16:32

Ba fait comme tu veux...
Ton code est pas lisible sur le forum, mais ne copie par mon code, mais preleve des choses qui te seraient utiles, le keystate est deja mieux que : evenement.key.keysym.sym...
Apres, tu geres les attentes, ca te servira plus tard, tu as toutes les infos pour retablir ton code, a toi de jouer, je vais te donner des infos :

SDL_GetTicks() : valeur montante
SDL_GetKeyState(NULL) : permet de tester les touches
SDL_PollEvent(&evenement) : (au cas ou tu connais pas) Prelever l´evennemment en continu, forcement le mettre car sinon tu reste attendre sans tester le temps plus tard.

Donc dans ton code, met SDL_PollEvent(&event) au lieu du waiEvent, ca doit etre ca qui faisait deconner ton programme.

kikou81
kikou81
Niveau 9
31 mai 2006 à 20:20:22

:snif: Ca ne marche pas plus en mettant SDL_PollEvent(&evenement) ai lieu du waitEvent...Merci beaucoup quand même de t´etre donné autant de mal pour moi :)

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 20:38:13

Derien ^^
J´espere que tu arriveras a resoudre ton erreur :)
Mais utilise correctement l´attente et ca edvrait fonctionner.

countag
countag
Niveau 5
31 mai 2006 à 23:24:20

juste comme ca, je sais pas si je dis une connerie mais tu ne l affiche pas "imageDeFond" dans ton code.

kikou81
kikou81
Niveau 9
01 juin 2006 à 12:27:40

Oui tu dis une connerie :) ==> J´ai mit un peu avant la boucle "SDL_BlitSurface(imageDeFond, ...)
Je suis désespéré je ne sais ps quoi faire :snif:

kikou81
kikou81
Niveau 9
01 juin 2006 à 12:37:51

==>C´est moi qui est dis la connerie, j´avais effectivemment oublier de faire un fli() excuse ^^ :honte:

kikou81
kikou81
Niveau 9
04 juin 2006 à 18:10:08

Ca continue a me faire le probleme...Je n´y arrive vraimment pas.

countag
countag
Niveau 5
04 juin 2006 à 19:42:01

je pense que ton problème vient de :

SDL_FillRect(ecran, NULL, 0);
SDL_BlitSurface(imageDeFonddeux, NULL, ecran, &positionDeFond);
SDL_BlitSurface(jack, NULL, ecran, &positionJack);
SDL_Flip(ecran);

si tu prefere à chaque frame il fais ceci donc en gros, à chaque frame il blit imageDeFonddeux et jack,

t´aura beau mettre :

if(key_s) blit(imagefond) //code abreger

ben toute suite apres il blit imageDeFonddeux,

faut que tu enleve ceci.

puis tu veux faire quoi exactement ?

dynoplasmma
dynoplasmma
Niveau 9
04 juin 2006 à 20:36:51

Bonsoir, j´ai decidé aujourd´hui de separer mon code en beaucoups de pages, pour plus de clareté, ca a pas été de la tarte.

Mais j´approche de la reussite, mais la, petit probleme, erreur dans le prototype d´une fonction :
http://www.wall.epiknet.org/

Erreur en anglais : parse error before "TTF_Font"

Erreur en francais : analyser l´erreur avant « TTF_Font »

Donc apparamment, il y a une erreur avant TTF_Font, mais je ne la vois pas...

merci d´avance a ceux qui trouveront reponse a mon probleme et pourront ainsi m´aider a le resoudre :)

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