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

Développement 2D, 3D et Jeux Discussion :

Gérer le deplacement dans une carte 2D


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut Gérer le deplacement dans une carte 2D
    Salut à tous !

    Voilà j'ai une question mais je n'ai trouvé aucune réponse dans le forum (j'ai peut-être mal cherché mais j'ai fouiné dans les recoins sans succès).

    J'aimerais deplacer une image (par exemple un petit cercle) le long d'un tracé 2D.

    Je vous poste un exemple en image pour mieux comprendre :



    Donc j'aimerais faire deplacer a vitesse constante le petit point blanc sur le tracé gris.

    Ma question est la suivante : Est-ce que je doit mettre la "carte" (vert + gris) dans une matrice de bool et mettre 1 où l'on peut aller et 0 on c'est interdit, et ensuite faire une fonction qui ferait bouger le point blanc suivant les "1" de la matrice ? Est-ce une bonne solution ? Il y en a-t-il des meilleurs ou des plus "logiques" ?

    En fait j'ai du mal à modéliser le deplacement (j'ai de bonne base en C++, C, etc... mais tout ce qui est graphique je ne connais pas, c'est pour ça que je veux apprendre).

    Merci à tous !

    ++ Francky

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Le mieux serait de définir une série de points qui défini ton tracé. Ensuite faire un timer qui se déplace de n unités (centimètres/mètres/etc..). Pour définir les n unités à parcourir, il "suffit" de savoir dans quel segment ton point se situe. Ensuite le calcul est relativement simple sur les équations de droites.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci de ta réponse

    Tu dis "définir une série de points", c'est à dire faire un tableau de point(x, y) ? Ca fait quand méme assez gros pour une longue carte non ?

    En fait j'aimerais simuler le deplacement d'une voiture (modélisé par le point) qui roulerais sur la piste grise sur l'image.

    Il faudrait que je modélise le circuit, tout en incorporant la vitesse à laquelle la voiture pourait passer à telle ou tel point, ou bien plutot le degrès du virage, ce qui ferais que la voiture pourait s'adapter au virage ... en fait j'ai du mal à voir comment modéliser tout ça Mais tout ça n'a rien à voir avec l'affichage (d'ailleur où pourais-je poster mes question à propos de la modélisation et de la simulation ?)

    ++

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Tu dis "définir une série de points", c'est à dire faire un tableau de point(x, y) ? Cela fait quand même assez gros pour une longue carte non ?
    Oui exactement.
    Cela peut être gros, mais le temps de calcul reste ridicule puisque c'est toujours un intervalle de points ou quelques intervalles de points.

    Sinon utiliser des interpolations non linaires de points comme Lagrange pour simuler le tracer, moins de points en place, ce qui ne veut pas dire que les calculs sont plus simple

    Sinon les autres parties du forum qui te serait utile est "Algorithmes" -> "Traitement d'images" et "Math".

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    une autre solution consiste à créer un "masque" c.a.d une image seconde qui contient une couleur unique déterminant le tracé du circuit.
    Après pour savoir si la voiture sort du circuit il faut effectuer des "pixels collision"

  6. #6
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    une autre solution consiste à créer un "masque" c.a.d une image seconde qui contient une couleur unique déterminant le tracé du circuit.
    Après pour savoir si la voiture sort du circuit il faut effectuer des "pixels collision"
    J'y ai également pensé mais ce procédé sera gourmand, il faudra tester a chaque fois si l'image se trouve ou non sur des pixels de la couleur du masque...

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et pourquoi pas définir ton parcours à l'aide d'une spline ou autre courbe paramétrique ? Ca te permettra d'avoir un contrôle fin sur le tracé, mais aussi sur la vitesse entre chaque paire de points de contrôle.

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Pas mal la solution de spline !

    Mais si je veux modéliser un circuit réél, comment calculer ces "splines" ?

    Et aussi comment délimité ces splines? Les points entre chaque spline seront des distance en km, des coordonnées de pixels ...

    Plus je creuse et plus je trouve que ce qui paraissait simple au début et en fait super complexe ...

    Merci pour vos réponses

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il existe des types de splines qui peuvent passer par des points de passage donnés (par exemple les B-Splines). Il faudra juste un peu de maths pour implémenter le truc ; par exemple pour les B-Spline je crois me souvenir qu'il faut résoudre un ou deux systèmes d'équations, dépendant de l'ordre de la spline et du nombre de points de passage.

    Mais étant donné que c'est très utilisé pour les jeux vidéo (dès qu'on a une trajectoire prédéfinie à représenter, on utilise des splines), tu devrais trouver quelques ressources pas trop orientée maths en cherchant un peu.

  10. #10
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il existe des types de splines qui peuvent passer par des points de passage donnés (par exemple les B-Splines).
    Ce n'est pas le cas des B-Splines, elle ne passe pas par les points

    Citation Envoyé par Ti-R Voir le message
    Sinon utiliser des interpolations non linaires de points comme Lagrange pour simuler le tracer, moins de points en place, ce qui ne veut pas dire que les calculs sont plus simple
    C'est ce que je disais au dessus "interpolations non linaires", de type Lagrange.


    une autre solution consiste à créer un "masque" c.a.d une image seconde qui contient une couleur unique déterminant le tracé du circuit.
    Après pour savoir si la voiture sort du circuit il faut effectuer des "pixels collision"
    Le problème de cette solution étant de définir la vitesse du véhicule, un pixel en diagonale cela représente quoi en distance ?

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce n'est pas le cas des B-Splines, elle ne passe pas par les points
    Pas par leurs points de contrôle, mais on peut déterminer ceux-ci facilement de sorte que la B-Spline passe par les points donnés, non ?

  12. #12
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    On doit pouvoir le faire, je n’ai jamais réfléchi au problème, et je n’ai pas manipulé les B-Splines depuis quelques années, mais cela doit être possible

    Comment, alors là, je peux pas répondre comme cela, il faut faire des recherches

  13. #13
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci de vos réponses (même si je comprends pas tout )

    Donc pour vous : spline pour definir une courbe mathématique du tracé, et après des math pour faire avancer les voitures, pour trouver la vitesse de passage etc...?

    Je vais me documenter sur les spline

    Et si je fesais une approximation par des segments ...

    En fait ça me perturbe tout ça j'ai du mal à imajiner d'une part comment à partir d'une image d'un circuit je peux obtenir une courbe mathématique et d'une autre part coment à partir d'une courbe mathématique je peux faire avancer mes bolides ...

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En fait ça me perturbe tout ça j'ai du mal à imajiner d'une part comment à partir d'une image d'un circuit je peux obtenir une courbe mathématique et d'une autre part coment à partir d'une courbe mathématique je peux faire avancer mes bolides ...
    A partir de l'image directement, ça risque d'être compliqué. Il faudrait plutôt que tu aies à disposition les points de passage.
    Ensuite pour faire avancer les bolides, et bien rien de compliqué tu appliques la formule de ta spline avec en paramètre le temps T actuel, et ça te donne la position courante.

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Comme ils ont déjà cités les courbes BSplines sont les mieux adaptées à ce type de problème, mais il te faut créer 2 courbes pour limiter les bordures de la route l'une externe est l'autre interne ( le gris) afin que tu parviens à travailler l'intelligence artificielle pour cela tu développe une surface remplissant la zone gris par une interpolation des 2 courbes
    Rext(An,t) , Rint(An,t) , An ( xn,yn; le nieme point) R=Bspline(x,y) t: la variable parcourant le long de la route
    on introduisant une autre variable u , par interpolation R(t,u,An) = (1-u)*Rint(t,An)+u*Rext(t,An) 0= <u<=1 u parcoure la largeur de la route
    et enfin on peut varier les 2 paramètres
    t : pour faire avancer ton cercle
    u: pour le faire glisser sur le 2 bords et comme ça tu manipule la manœuvre on variant t, u qui sont le paramètres majeurs pour la AI
    tu peut même faire des simulation de conduite avec ce principe
    Bonne Chance

  16. #16
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci de vos réponses

    Alors en fait je n'ai pas besoin de faire bouger la voiture sur un bord ou sur un autre dfe la piste, puisque l'affichage est simple.

    Donc ce que j'ai fait (aujourdui" : je suis partit d'une carte d'un circuit, j'ai tracé en rouge la trajectoire que je voulais que la voiture ai sur le circuit.

    J'ai créer un petit (mais chiant) script qui ouvre l'image, et a partir d'un point donné trouve la trajectoire et enregistre pixel par pixel la trajectoire dans un fichier (ce qui fait plus de 1200 points). Avec ce script je peux créer le fichier des points de n'importe quel circuit si il y a une trajectoire.

    En fait j'ai utilisé ca parce que le circuit fait à peu près 5000 mètres, avec plus de 1000 point ça me fait une belle résolution d'affichage. En fait j'esseye de concevoir un jeu de gestion de voiture, donc l'affichage n'est la que pour dire où sont les voiture que l'on gère et non pas comment elle roule (dérapage etc..)

    Merci pour vos réponses en tout cas

    La je m'attaque à faire bouger une voiture le long du circuit

    ++

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Voilà à quoi j'arrive :

    Je pense que la solution est bonne :B en tout cas je suis fier de moi (je ne connaissais rien à la SDL ni à la 2D avant avant-hier)!

    http://www.youtube.com/watch?v=gAPt4KcVyk4

    La qualité est bof mais c'est CamStudio (le logiciel pour enregistrer l'ecran) qui laisse plein de trace degueulasse ! Quand je le lance sans CamStudio c'est nikel, et en plus ca prends pas de CPU (rafraichissement 100 fois par seconde).

    ++

  18. #18
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    Citation Envoyé par ironzorg Voir le message
    J'y ai également pensé mais ce procédé sera gourmand, il faudra tester a chaque fois si l'image se trouve ou non sur des pixels de la couleur du masque...
    oui c'est peut être plus gourmand mais la solution avec des calculs et des courbes prétracés cela donne des mouvements trop uniformes et linéaires comme le montre la vidéo que tu as postée sur Youtube.
    Je sais je suis casse-pied mais c'est ce que le joueur va penser et tu ne pourras pas simuler les dérapages et les têtes à queue

  19. #19
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Ben en fait l'interet du jeu c'est de manager une equipe et de la faire courir ! Il suffit donc de montrer où se trouve les voitures et à quel place, d'afficher les temps au tour, et de dire si il y a abandon (toute la partie usure, pilotage, sortie de route... est gérer en interne mais pas retranscrit sur la carte du circuit).

    Voilà merci à tous

    Sinon une autre question tant qu'on y est : il y a-t-il possibilité de faire de la pseudo transparence avec la SDL (peutetre en chargeant des GIF à la place des BMP). Parce que je voudrais mettre un cercle à la place du carré rouge mais les bord sont tout carrés

    Merci ++

  20. #20
    Membre habitué
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Points : 145
    Points
    145
    Par défaut
    Avec un colorkey, ou en effaçant la zone avec un logiciel de dessin comme Paint.NET.

Discussions similaires

  1. [MCD] gérer les listes dans une entité
    Par H1B4K dans le forum Schéma
    Réponses: 7
    Dernier message: 09/10/2006, 18h12
  2. Réponses: 15
    Dernier message: 27/09/2006, 11h46
  3. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 21h28
  4. chercher des rue dans une carte
    Par .:dev:. dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 21/09/2005, 10h29
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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