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] Algorithme de saut.

vexover
vexover
Niveau 9
29 janvier 2007 à 14:10:24

Bonjour.
J´ai commencer le dévelloppement d´un petit jeu de plate forme pour tester les capacités de la SDL et m´entrainer un peu à l´image de zelda 2, le dévelloppement s´est déroulé sans problème juqu´au moment où il fallu écrire un algorithme permettant au personnage de sauter j´ai décidé pour cela d´utiliser la getion du temps que la SDL propose mais apparement ça pause un problème : en effet , à l´appuie de la touche censer lance l´animation du saut, le personnage reste immobile pendant quelques secondes au lieu d´efectuer le saut. voici la partie du code :

if (test == 10) /* c´est à dire if touche saut enfoncé */

{
testSaut = 0;
tempsPrecedent = SDL_GetTicks();
while (testSaut < 40 )
/* Revient faire monter le skin jusqu´a 40 pixel ( voir ci dessous ) */

{
tempsActuel = SDL_GetTicks();
if(tempsActuel - tempsPrecedent > 15)
/* Si 15 milisecondes se sont écoulés */

{

/* toutes les positions ci dessous sont celle des différentes faces du personnage */

positionGaucheEpeeLever.y--;
positionDroitEpeeLever.y--;
positionDroitArreter.y--;
positionGaucheArreter.y--;
positionDroitMarche.y--;
positionGaucheMarche.y--;
testSaut++
SDL_BlitSurface(DroitMarche, NULL, ecran, &positionDroitMarche);
tempsPrecedent = tempsActuel;

}
else
{
SDL_BlitSurface(DroitMarche, NULL, ecran, &positionDroitMarche);
/* sinon coller la surface au meme endroit pour que le personnage ne disparaisse pas mystérieusement entre les incrementation de position */
}
}
testSaut = 0;
tempsPrecedent = SDL_GetTicks();
while (testSaut < 40)
{
tempsActuel = SDL_GetTicks();

if(tempsActuel - tempsPrecedent > 15)
{
positionGaucheEpeeLever.y++;
positionDroitEpeeLever.y++;
positionDroitArreter.y++;
positionGaucheArreter.y++;
positionDroitMarche.y++;
positionGaucheMarche.y++;
testSaut++;
SDL_BlitSurface(DroitMarche, NULL, ecran, &positionDroitMarche);
tempsPrecedent = tempsActuel;

}
else
{
SDL_BlitSurface(DroitMarche, NULL, ecran, &positionDroitMarche);
}
}
}

Ps : j´utilise la fonction au début du code SDL_EnableKeyRepeat(10, 10);

Voilà, je n´ai pas mis le code entie car évidemment il aurait été bien trop grand, mais je ne pense pas de toute façon que l´ereur puisse venir d´un autre endroit du code.

Et merci beaucoup à ceux qui auront eu le courage de lire un code aussi chaotique x).

Fvirtman
Fvirtman
Niveau 10
29 janvier 2007 à 14:28:48

Faire des blit, oui, mais ça ne s´affiche que quand tu flip()

si je comrpends bien, quand tu sautes, tu pars dans un while, jusqu´a la fin du saut : donc du coup, ça "bloque" tout le programme non ?
genre les monstres n´avanceront plus quand tu seras dans cette partie ?

godrik
godrik
Niveau 30
29 janvier 2007 à 14:29:08

ca serait bien de mettre votre code sur un wall:
rafb.net/paste
par exemple.

Il y a quelquechose qui ne me plait pas trop dans ta méthode. Tu ne peux faire sauter qu´un seul personnage en meme temps... De plus, tu mélanges le moteur de jeu et l´affichage.
Je te conseille de découpler les duex pour y voir plus clair.

J´ai aussi l´impression que le meme code est présent deux fois de suite, ce qui est généralement une source profonde d´erreur.

vexover
vexover
Niveau 9
29 janvier 2007 à 14:45:32

"si je comrpends bien, quand tu sautes, tu pars dans un while, jusqu´a la fin du saut : donc du coup, ça "bloque" tout le programme non ?" >>> en effet je n´y avais pas pensé, mais quel serait alors la solution, faire monter le sprite d´un pixel à chaque tour de la boucle evenementiel pour donner l´impression d´une simultanéité ? ( aussi, j´utilise la requête d´évènement Poll_EVENT et non pas Wait_EVENT mais je ne sais pas si cela changera quelques choses ).

"tu mélanges le moteur de jeu et l´affichage.
Je te conseille de découpler les duex pour y voir plus clair." >>> oui je sais, j´ai codé le programme un peu à la va-vite, je n´ai meme pas fait de programmation modulaire ( oui je sais c´est mal :p ), mais c´était surtout pour tester un peu la SDL .

"J´ai aussi l´impression que le meme code est présent deux fois de suite, ce qui est généralement une source profonde d´erreur." >>> Non, il y a une partie pour faire monter le personnage et une autre pour le faire redescendre
, mais je pense qu´il aurait été plus judicieux d´utiliser la getion de relâchement des touche, cela dit ce code devrait marcher, non ?

"faire des blit, oui, mais ça ne s´affiche que quand tu flip()" Ah ! c´est donc de là que vient le problème, merci beaucoup ^^.

Merci Pour vos précieux conseils, je tacherais de les suivre dorénavant ^^.

Fvirtman
Fvirtman
Niveau 10
29 janvier 2007 à 14:53:28

Je pensais faire des petits tutos sur la création d´algos sympas (entre autres créer un petit jeu de plateforme)
Si je le crée je te tiendrai au courant.
Ce qui me manque surtout, c´est le temps...

Récemment, j´ai ajouté dans mon tuto (cf ma carte) la gestion des pixels avec SDL.

Disons que dans l´optique, ce qu´il faut faire, c´est cette forme la :

init();
while(!fin_fu_jeu())
{
controles(); // clavier
evolue();
affiche();
}

et il ne faut jamais sortie de la.
En gros, dans controles, tu releves si le joueur appuies sur une touche, s´il le fait, tu le notes quelque part.

dans evolue : c´est la que tu notes que le joueur amorce un saut : et tu stockes la position de départ, la force d´impulsion, lee chrono a l´instant ou tu sautes. Bref, tout ce qu´il faut pour pouvoir calculer la position du joueur a un temps t : autrement dit, quand tu repasseras la, dans la prochaine boucle tu recalculeras la nouvelle position du joueur.

En gros, pouvoir dire :

"je te dis que je saute, voici les parametres, maintenant, je retourne dans ma boucle principale, et je veux qu´a chaque fois que je te dis "evolue", tu me places mon mec la ou il faut, en fonction du chrono..."

Ensuite, la fonction affiche ne fait qu´illustrer tes structures...

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