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 :

Trajectoire des sprites


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Trajectoire des sprites
    Bonjour,
    Voila, je me met à la programmation d'un shoot them up avec SDL.
    J'aimerais savoir comment je peux faire pour définir des trajectoires à mes sprites (ennemies) comme, les faire tourner en huit, les faire arriver en file indienne de la gauche de l'écran puis qu'ils se retrouvent en haut de l'écran en formation "triangle"... etc
    Je ne sais pas si vous connaissez "Critical mass - Critter" qui est un très bon shoot'em up, je voudrais faire évoluer les ennemies un peu de la même facon, merci d'avance

  2. #2
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Salut,

    Je suppose que tu connais déjà le principe d'affichage de SDL, et que tu peux définir la position d'un sprite au blit grâce à un SDL_Rect. Si oui ta question est plus de l'algorithmie. Les déplacements ce n'est ni plus ni moins que des changements en X et Y. Si tu veux des algos pour faire des formes spéciales, je pourrais déplacer ton sujet sur le forum algorithmie plus approprié .
    Fiquet
    - FAQ SDL
    - FAQ C++

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    un methode simple et puissante pour gerer les deplacement de tout objet :
    chaque objet a un vecteur deplacement {x,y} et une position.
    le vecteur de deplacement pointe toujours vers la destination, et à chaque mise à jour de l'objet, il suffit de faire
    position = position + deplacement
    et voila ton objet va tout seul comme un grand vers sa destination...
    un gros aventage de cette methode est qu'elle permet tres simplement d'ajouter des "truc" simpa comme de la gravité, ou la gestion simple de collisions
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par bafman
    un methode simple et puissante pour gerer les deplacement de tout objet :
    chaque objet a un vecteur deplacement {x,y} et une position.
    le vecteur de deplacement pointe toujours vers la destination, et à chaque mise à jour de l'objet, il suffit de faire
    position = position + deplacement
    et voila ton objet va tout seul comme un grand vers sa destination...
    un gros aventage de cette methode est qu'elle permet tres simplement d'ajouter des "truc" simpa comme de la gravité, ou la gestion simple de collisions
    Je fais pareil que toi sauf que j'ajoute toujours le temps (et je me doute bien que tu l'ajoutes aussi ) dans le calcul du déplacement. Finalement, j'ai un vecteur Vitesse qui donne la direction du mouvement et je calcule le déplacement en faisant: Vitesse*Temps. Cela permet d'avoir une vitesse constante par rapport aux différents ordinateurs que j'utilise pour mes tests.

    Jc

  5. #5
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en fait pour la prise en compte du temps tu a plusieurs possibilitée :
    - prendre en compte le temps dans le calcule du deplacement
    - prendre en compte le temps lors de l'appel de l'update (l'update se faisant à horaire regulier (24 fois par secondes par exemple), on a plus a prendre le temps en compte lors du deplacement)

    chacune des methode ayant ses aventages et ses inconvenients...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Ok merci, je vais réfléchir à tout ca et je vais allé faire un tour dans la section algorithmique alors...

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    SDL n'étant pas sous-pixel on ne peut pas appliquer des calculs normaux de trajectoire, il faut prendre les approximations entières.
    C'est un peu chiant mais on se débrouille en travaillant avec des suites de translations sur des pixels.
    Boost ftw

  8. #8
    mat.M
    Invité(e)
    Par défaut
    [quote="loufoque"]SDL n'étant pas sous-pixel quote] ?
    Que veux-tu dire par là ? On peut accéder aux pixels d'une image avec SDL ...

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par loufoque
    SDL n'étant pas sous-pixel on ne peut pas appliquer des calculs normaux de trajectoire, il faut prendre les approximations entières.
    C'est un peu chiant mais on se débrouille en travaillant avec des suites de translations sur des pixels.
    Je pense qu'il parle du problème que lorsqu'on fait un blit on donne une position en entier, or généralement la position du sprite est en flottant (plus précis pour le calcul du déplacement).

    Je ne trouve pas que c'est un problème, je fais tout en flottant et juste avant le blit je passe en entier...

    Jc

  10. #10
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par fearyourself
    Je pense qu'il parle du problème que lorsqu'on fait un blit on donne une position en entier, or généralement la position du sprite est en flottant (plus précis pour le calcul du déplacement).
    Idem.

    Citation Envoyé par fearyourself
    Je ne trouve pas que c'est un problème, je fais tout en flottant et juste avant le blit je passe en entier...
    C'est probablement la meilleure solution tant qu'on a assez de puissance de calcul, et avec les machines actuelles c'est généralement le cas. Mais quand on se lance dans du GigaWing like et autres joyeusetés et qu'on a des centaines ou des milliers de sprites le coût des conversions devient non négligeable


    Pour les trajectoires, une solutions générique conciste à donner des points de passage puis à faire une interpolation entre ces points (tout simplement linéaire pour faire simple, ou polynomiales pour avoir plus rond etc.)
    Ca permet avec un minimum de travail de définir n'importe quelle trajectoire (même complexe) sans rajouter du code. Par contre pas de réactivité et peu d'aléa.
    Sinon il est possible de jouer avec des sinus pour les ennemis qui arrivent en zig-zag, voir même en huit mais il faut s'accrocher.

    Pour les tirs, il y a bulletML à regarder. 8)

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Je ne trouve pas que c'est un problème, je fais tout en flottant et juste avant le blit je passe en entier...
    Disons que tu veux déplacer un objet placé en (x, y) dans une ligne droite définie par un angle α, le tout sur une distance d.
    Tu obtiens donc les nouvelles coordonnées (x', y') ainsi :
    x' = x + d*cos(α)
    y' = y + d*sin(α)
    Problème : le sin et le cos sont entre -1 et 1. Si d est trop faible, ça bouge pas.
    Boost ftw

Discussions similaires

  1. Programmation trajectoire des sprites
    Par Dokodoko dans le forum XNA/Monogame
    Réponses: 4
    Dernier message: 02/05/2013, 17h47
  2. Gestion des Sprites
    Par FCDB dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 02/01/2009, 11h00
  3. Algo pour trajectoire de sprite
    Par Energy52 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/09/2006, 17h01
  4. [2D] Gestion des sprites sur un moteur 2d
    Par drcd dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 27/03/2006, 16h17
  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