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] Sprite personnage

countag
countag
Niveau 5
15 mars 2006 à 19:22:15

Bonjour,

Dans la création de mon jeu RPG, je voudrais une petit explication sur le fonctionnement des sprites pour les personnages.
je sais que c´est un enchainement d´images mais je voudrais un exemple simple et concret si possible et une explication.

merci de votre aide. :)

Lapintade
Lapintade
Niveau 30
15 mars 2006 à 19:26:55

Si ton perso est une image 16X32 par exemple. Tu as plusieurs etapes :

1/ Tu affiche une image 1 de ton perso statique

2/ Tu fais bouger l´image a l´ecran (toujours la meme image, donc le sprite bouge, maisil represente un perso fixe). Tu le fais avance de 1 pixel en 1 pixel par exemple.

3/ Pour donner l´impression qu´il y a une anim de marche, de temps en temps (allez disons toutes les 5 images), tu changes l´image que tu affiche. Si tu as 10 images representant ton perso en train de marcher, tu les utilises les 10 a la suite ... donc en gros tous les 5 pixels, tu change ton image.

Donc tu as un perso qui se deplace bien (de 1 en 1) et tu as l´impression qu´il est animé (meme si en fait il "glisse" un peu).

countag
countag
Niveau 5
15 mars 2006 à 19:29:03

bon alors je dois recuperer le temps avec SDL_GetTicks() ?
puis j´affiche les 3images par exemple dans ce temps ?

Lapintade
Lapintade
Niveau 30
15 mars 2006 à 19:30:24

La SDL te fourni certainement un affichge qui est synchronisé avec l´affichage ecran. A chacune de ses boucle, tu dois afficher une image et une seule. A chaque tour de boucle, tu peux changer la position de cette image, et l´image source.

Quintoff
Quintoff
Niveau 10
15 mars 2006 à 19:39:04

Tu peux aussi considérer un décplacement par "case" ou par tile qui est plus facile. Si tu gères ton jeu avec des tiles, tu peux faire une animation se déplacement d´un tile par déplacement au lieu de déplacer ton perso pixel par pixel. Ca simplifie l´annimation. Si ton jeu n´utilise par de tiles, rien ne t´empêche de faire comme si et de quand même déplacer ton perso d´un nombre de x pixels sur lesquels s´étant ton anim de déplacement :)

countag
countag
Niveau 5
15 mars 2006 à 19:46:30

sisi j´ai fait un editeur de map en SDL et maintenant je créer la partie jeu, mais bon je vois pas un deplacement de 32pixels :/ ca ferais super moche a part si je réalise plusieur mouvement dans ces 32pixels mais sinon ca ferait trop moche je pense :)

Quintoff
Quintoff
Niveau 10
15 mars 2006 à 20:25:59

C´est vrai que c´est plus efficace pixel par pixel qu´avec des tiles, mais c´estplus facile. Enfin si t´y arrive sans soucis tant mieux :ok:

countag
countag
Niveau 5
15 mars 2006 à 20:40:55

j´ai peut-être compris le système :p là j´ai fait des test, ca va tres vite :p donc je pense que le SDL_GetTicks() va me servir pour l´intervalle entre chaque images :)

Quintoff
Quintoff
Niveau 10
15 mars 2006 à 21:00:56

Je sais pas à quoi sert cette fontion SDL, perso moi je faisais une pause de x ms entre chaque frame de l´animation.

countag
countag
Niveau 5
15 mars 2006 à 22:40:18

franchement le système de pause ça marche nikel :), je viens de tester ca rend bien :) plus que à écrire une jolie fonction pour deplacer mon personnage dans le sens voulu et tous le reste :).

merci pour vos aides :)

JeanYvesYves
JeanYvesYves
Niveau 10
15 mars 2006 à 23:57:36

Quintoff > "Je sais pas à quoi sert cette fontion SDL"
--> SDL_GetTicks() sert justement a récupérer le chrono, précis a la milliseconde.

"perso moi je faisais une pause de x ms entre chaque frame de l´animation."
--> Tu utilisais quelle fonction ? :)

_Xaar
_Xaar
Niveau 10
16 mars 2006 à 03:34:06

Cà m´interesse aussi de le savoir :) cà n´a pas l´air de ressembler à ce que je fais.

countag
countag
Niveau 5
16 mars 2006 à 07:12:41

il doit utiliser la même fonction que moi je pense :

void pause(int miliseconde)
{
int beg=clock();
while(clock()-beg<=miliseconde);
}

fonction très simple, qui utilise time.h :) et ca marche du tonnerre :p

JeanYvesYves
JeanYvesYves
Niveau 10
16 mars 2006 à 08:51:58

attention, il me semble que clock() n´est pas précis, il a une incertitude qui, selon des systemes, peut monter a 20 ms.

essayez de remplacer clock() par SDL_GetTicks() (qui s´appuie sur une comptage plus précis)

godrik
godrik
Niveau 30
16 mars 2006 à 10:48:18

de plus, ca, ca va mettre une pause entre le début de la fonction et la fin de la fonction.
mais ca ne garantie pas le framerate. Il faudrait pour cela afficher l´image x secondes apres que la derniere n´ait été affichée.
parceque la tu va avoir un temps inter image de x+temps de préparation de l´image+gestion du jeu

(Deplus, ca, ca fait de l´attente active, ce n´est pas tres beau...)

JeanYvesYves
JeanYvesYves
Niveau 10
16 mars 2006 à 11:14:55

en effet, quit a faire attendre, utilise SDL_delay, ça attend aussi, mais ça reschedule, pour pas que le CPU soit a 100% pendant l´attente.

countag
countag
Niveau 5
16 mars 2006 à 12:01:00

effectivement SDL_Delay marche aussi bien, je la connaissait pas mais bon ca n´influe pas trop sur mon type de jeu, un rpg en C++/SDL graphiquement RPG maker.
je prend note de tous ça :)

JeanYvesYves
JeanYvesYves
Niveau 10
16 mars 2006 à 12:07:56

Faut bien voir la différence entre un Delay, et ton while (meme si a la sortie, tu vois la meme chose)

Ton while va dire a Windows, autant qu´il peut, autrement dit plusieurs milliers de fois par secondes ?

Le temps est écoulé ? --> non
Le temps est écoulé ? --> non
Le temps est écoulé ? --> non
....

et le processeur va fonctionner a 100% car il va passer son temps a répondre non a la question...

Avec un Delay, le processus se met en "Sleep" : il s´endorre
En gros, avec un Delay, tu dis a Windows (ou autre systeme)

"je m´endorre, réveille moi dans x millisecondes, en attendant, fait ce que tu veux"

et du coup, le processeur ne tourne pas a 100% :)

Quintoff
Quintoff
Niveau 10
16 mars 2006 à 19:36:49

Tu utilisais quelle fonction ?

En fait c´était en Java :-- Je comme je sais que tu adore le java... ^^

Enfin pour ceux que ça interesse c´est pas bien compliqué en java :

try{
sleep(x); // pause de x ms
} catch(Exception e) { /*erreur si la pause est interrompue. Ca m´est jamais arrivé encore ^^ */ }

Perso j´ai fais ce jeu il y a un an et depusi bien des notions de programmation se sont éclairée pour moi et la méthode que j´utilisais était loin d´être la meilleure : j´utilisais un thread qui modifiait les valeurs du perso pour modifier sa position et son animation alors que la boucle d´affichage continuait à tourner...

Sinon j´en profite pour demander si vous savez quelle est la précision de la fonction "sleep" de Java?

countag
countag
Niveau 5
16 mars 2006 à 19:55:12

euh moi aussi j´ai une question, bon mon perso marche nikel, j´essaie de faire en sorte quand quand il est a 100px du bord la map scroll le problème c´est que ca scroll et que le perso marche toujours donc en gros c´est comme si je le faisait marcher 2fois plus vite :/ si je fais que scroller la map, le personnage ne sera plus animé :/ des idées ?

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