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 :

[XNA] FPS : repérer un ennemi dans le viseur


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut [XNA] FPS : repérer un ennemi dans le viseur
    Bonjour à tous,

    Je suis entrain de développer un petit FPS en XNA et j'aimerais savoir comment faire pour connaître la distance d'un point par rapport à une droite, afin de repérer l'ennemi sur mon viseur.

    Pouvez-vous m'aider ? Merci d'avance,

    John.

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    sqrt((x2-x1)² + (y2-y1)² + (z2-z1)²)
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Merci pour la réponse.

    Je ne vois pas quelle condition je pourrais utiliser pour repérer cela. Pour mes test pour l'instant je veux juste que mon crosshair vert devient rouge lorsque je suis sur un ennemi.

    J'ai 2 méthodes qui sont Cible et Position, elles retournent un objet de type Vecteur3.

    La méthode Cible sert à donner la position du point ciblé par la caméra subjective en fonction du roulis et du lacet.

    La méthode Position qui me donne la position du joueur ennemi.

    Pour faire la formule que tu m'as donné, j'ai fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double distTarget = Math.Sqrt((_cam2.Position.X - _cam.Cible.X) * (_cam2.Position.X - _cam.Cible.X) +
                (_cam2.Position.Y - _cam.Cible.Y) * (_cam2.Position.Y - _cam.Cible.Y) +
                (_cam2.Position.Z - _cam.Cible.Z) * (_cam2.Position.Z - _cam.Cible.Z));
    Seulement je ne vois pas quoi faire avec.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    La méthode classique est de lancer un rayon, partant du crosshair et de vérifier si ce rayon entre en collision avec la bouding box de l'ennemi.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    Par défaut
    Bon ben j'ai trouvé la réponse en faisant ceci :

    A est votre personnage (cam.Position)
    B est le personnage ennemi (cam2.Position)
    U est le vecteur indiquant la direction dans laquelle vous tirez (A.Cible.X - A.Position.X, A.Cible.Y-A.Position.Y, A.Cible.Z-A.Position.Z)
    H est le projeté orthogonal de B sur d(A,U) (c'est à dire l'endroit le plus prêt de B où passe la "balle" tirée)

    On veut connaitre la distance BH.

    AB est le vecteur de coordonnées (B.Position.X - A.Position.X, B.Position.Y - A.Position.Y, B.Position.Z - A.Position.Z)
    U scalaire AB = xU*xAB + yU*yAB + zU*zAB
    AH = (U scalaire AB) / norme de U
    BH = racine de (AB² - AH²)

    Il ne reste plus qu'à tester si BH est inférieur à l'échelle de l'objet modélisé sur 3dsmax (moi j'ai fais un cube qui fait 14cm donc BH < 14) pour savoir si on a l'ennemi dans notre viseur.

    Il faut pas oublier de tester si (U scalaire AB) est négatif alors on retourne rien, sinon on peut tirer sur l'ennemi lorsqu'on est de dos.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. repérer un espace dans une ligne
    Par jane40 dans le forum MATLAB
    Réponses: 6
    Dernier message: 26/10/2009, 10h45
  2. [SQL] Repérer une donnée dans une table
    Par trimate dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/04/2008, 15h41
  3. [AWT] repérer un clic dans un Rectangle
    Par bigVinz dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/12/2005, 09h42
  4. Repérer un dossier dans une arborescence
    Par Feustine dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2005, 13h54

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