IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Animations (hors sprite) en SDL


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut Animations (hors sprite) en SDL
    Bonjour,

    Je viens de rejoindre ce forum car j'ai actuellement commencé un petit projet en SDL. Jusqu'à présent, je me suis concentré sur l'affichage et maniement de mes sprites et l'algo de jeu.

    Maintenant j'aimerai aller plus loin et faire quelques animations plus complexe que le maniement basique des sprites. Pour vous donner une idée, ce serait des choses comme :
    - le fond du jeu qui aurait une animation à la windows media player
    - des interactions qui créent quelques effets sur des pixels précis

    J'ai vu qu'il était possible d'accéder aux pixels même d'une surface afin de l'éditer, mais je me demande si c'est la bonne question et s'il n'existe pas de méthodes turbo pour le traitement de pixels.

    Et de manière générale, comment se passe le développement d'une animation (imaginons un fond avec une animation répétée mais couleurs changeantes style windows media player, sans l'interaction avec la musique directement bien sûr) ?

    Est-ce que c'est d'abord étudier les formes de mon animation? Paramétriser (ça se dit?) tous les éléments? Le problème des dégradés qui peuvent aller dans toutes les directions.

    J'ai beaucoup travaillé dans le domaine de l'embarqué, donc je sais bien que sur un PC on a une grosse puissance de calcul à disposition, mais j'ai l'impression que dès que je fais des animations très basiques pour essayer, mon code devient vite lourdeau (même si l'exécution se passe vite).

    c'est assez difficile à poser comme question, j'espère que vous en comprenez le sens. Je suis preneur si vous avez quelques explications (surtout vis-à-vis de SDL), quelques liens de tutos sur comment développer une animation de A à Z, s'il existe des librairies déjà prévues, ou bibliothèques d'animations, ....

    Merci d'avance

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonjour et bienvenu sur developpez.


    C'est une question interressante que tu pose.

    Pour les animation :

    Si tu veux acceder au pixel afin de les modifier, il va falloir faire attention. Si tu test, tu verra que cela occasionne un gros ralentissement visible a l'oeil nu (dependant du nombre de pixel, mais modifier un sprite 50x50 est deja trop, j'en ai fait les test).
    Pour ce qui est d'une methode turbo, j'en ai pas encore vu.


    Pour ce qui est des animation, on essaye de toujours faire en sorte de les precalculer : par exemple, j'ai un sprite de 4*29 asteroid, j'en fait un tableau de 4*135*29 car je precalcul 135 animation possible (j'utilise SGE avec rotation, ca met 1~2 seconde a se faire).

    Pour ce qui est de la fluidité, j'ai l'impression que tu n'utilise pas le meme BPP sur chacun de tes sprite.
    Je m'explique :

    Lors de la creation de ta fenetre, tu donne un BPP (ou profondeur de couleur), generalement, on mets 32.
    Lorsque tu charge tes sprite, le BPP se met automatiquement et en general, c'est 24 BPP. Il y a donc une difference entre ton sprite que tu veux blitter, et ta fenetre.
    Or, SDL_BlitSurface ne peux pas coller une surface sur une autre s'il y a une difference a ce niveau. Donc, implicitement, elle fait une conversion. Et a chaque fois que tu veux re-afficher, elle refait la conversion. Pour supprimer ce temps de conversion, il faut convertir le sprite a son chargement grace a la fonction

    SDL_Surface* SDL_DisplayFormat(SDL_Surface*);

    Attention, cette fonction doit etre appeler apres SDL_SetVideoMode.
    De plus, SDL_DisplayFormat ne libere pas la SDL_Surface passer en parametre.


    Voila, je pense t'en avoir assez dit. Apres, pour l'animation, il faut definir une suite de sprite via des structures (meilleur moyen), il y a des tuto dessus.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut
    Hello et merci pour ta réponse.

    Quand je parle de fluidité, je ne dis pas que j'ai des problèmes de fluidité, tout se passe bien. C'est juste que le code devient vite grand pour faire quelques algos sur une animation.

    Quel est donc la solution si je cherche à faire un fond dégradé qui bouge et change de couleurs aléatoirement? tout dois passer absolument par des sprites? ce n'est pas très idéal :/

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonjour,

    Non, pas forcement.
    si tu veux faire un fondu aleatoire, u peux toujours faire un SDL_CreateRGBSurface que tu remplirais aleatoirement avec un SDL_FillRect, puis SDL_BlitSurface.

    Apres, il va falloir determiner les valeurs "aleatoire" pour faire un fondu agreable aleatoire. La, c'est plus de l'algo que de la SDL.

    Sinon, je suis daccord avec toi. Si on veux faire des animation "sécuriser" (c'est a dire avec verif chargement+verif conversion), le code devient vite grand. Mais quand tout est mis dans une structure (ou une classe), le code devient "leger", c'est a dire qu'une fonction s'occupe de tout et toi tu as juste a donner le chemin.

    http://www.gnurou.org/writing/linuxmag/sdl/partie3

    voila un lien pour l'animation via liste chainé

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut
    Je vois bien comment gérer une animation pour un truc qui est pré-défini (comm l'explosion dans ton lien), mais quand c'est du totalement aléatoire je pense qu'il est nécessaire de travailler au niveau du pixel et de faire de l'algo à fond.

    J'aimerai bien trouver quelques consignes pour débuter dans le domaine.

    Si par exemple je veux avoir un dégrade en diagonale dont les couleurs clés ( from -> to ) et les lieux de références changent, je suis obligé de travailler au niveau du pixel il me semble puisque les surfaces sont rectangles.

    je vais faire quelques essais.

    Ce que je cherche comme genre d'aide ou de lien, c'est quelques consignes sur les manières de travailler et développer un algo de ce style (le dégradé est un exemple). Je me pose des questions comme :
    J'ai choisi de prendre la couleur ROSE comme référence en x = 200, y = 300 et de faire un dégradé circulaire dans toutes les directions vers le NOIR. Le point de référence bouge dans tous les sens (par exemple rebondit contre les bords diront nous).
    Dois-je partir du centre et tourner dans tous les sens pour calculer les couleurs de mes pixels?
    Dois-je partir d'en haut à gaucher et changer les calculs?
    Dans quel cas simplifier les parties ou devoir détailler chaque truc?

    Bref, c'est plus des conseils d'algo dans le traitement de gros tableaux à partir de sources aléatoires.

    J'ai mis ce topic dans SDL car je pensais que l'API offrait quelques possibilités dans ce domaine...

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Tu vise haut.

    La SDL ne te permettra pas de faire ceci de maniere optimiser si tu fait de la manipulation par pixel.

    J'ai choisi de prendre la couleur ROSE comme référence en x = 200, y = 300 et de faire un dégradé circulaire dans toutes les directions vers le NOIR. Le point de référence bouge dans tous les sens (par exemple rebondit contre les bords diront nous).
    Dois-je partir du centre et tourner dans tous les sens pour calculer les couleurs de mes pixels?
    Dois-je partir d'en haut à gaucher et changer les calculs?
    Dans quel cas simplifier les parties ou devoir détailler chaque truc?
    Typiquement, je te conseillerai de faire un enorme sprite qui representerai ton degrader, et d'utiliser a bon escient SDL_BlitSurface pour donner l'illusion qu'un cercle rose se deplace et rebondisse.

    Franchement, pour ce que j'en ai experimenter, plus tu fais de manipulation sur des pixel, plus ca ralentit. La SDL est critiqué pour sa lenteur justement, il faut veiller a faire les operation de blittage le plus optimiser possible.

    Sinon, tourne toi vers la SFLM (incompatible avec C par contre) ou alors vers le couple SDL/OpenGL (ce qui revient a utiliser uniquement OpenGl pour les sprite).

    Tu verra qu'on creer dabord les surface avant de les afficher.

Discussions similaires

  1. Deplacement de sprite avec SDL en langage c
    Par Invité dans le forum SDL
    Réponses: 3
    Dernier message: 16/12/2013, 20h53
  2. Problème pour animer un sprite
    Par Soward dans le forum SDL
    Réponses: 17
    Dernier message: 02/08/2007, 16h30
  3. Animation de Sprites .PNG: Démo ?
    Par broumbroum dans le forum Graphisme
    Réponses: 4
    Dernier message: 17/11/2006, 03h52
  4. Problème d'affichage d'un sprite avec SDL
    Par youp_db dans le forum SDL
    Réponses: 1
    Dernier message: 11/02/2006, 18h08
  5. [ Question ] Animer des sprites 3D
    Par Dam)rpgheaven dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/07/2004, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo