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

C# Discussion :

[C# XNA]Probleme rotation [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut [C# XNA]Probleme rotation
    Bonsoir,

    Je suis entrain de faire une petite IA sur un ennemi. J'aimerez faire en sorte qu'il puisse voir le joueur si il y a moin de 45° entre eux.
    J'ai fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    angle = (float)Math.Atan2(Main.player.position.Y - position.Y, Main.player.position.X - position.X);
    degres = angle * 180 / (float)Math.PI;
    Jusque la pas de problème, j'ai l'angle entre les deux.
    Mais quand je fais une rotation a l'ennemi, le degrés ne correspond plus.
    J'ai essayé sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    degres = angle * 180 / (float)Math.PI - rotation;
    Sa me donne des angles bizarres.
    Après pleins de tentatives, je ne sais pas quoi faire.

    Pouvez vous m'aidez svp.

  2. #2
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut
    Citation Envoyé par Exec57 Voir le message
    Bonsoir,

    Je suis entrain de faire une petite IA sur un ennemi. J'aimerez faire en sorte qu'il puisse voir le joueur si il y a moin de 45° entre eux.
    J'ai fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    angle = (float)Math.Atan2(Main.player.position.Y - position.Y, Main.player.position.X - position.X);
    degres = angle * 180 / (float)Math.PI;
    Jusque la pas de problème, j'ai l'angle entre les deux.
    Mais quand je fais une rotation a l'ennemi, le degrés ne correspond plus.
    J'ai essayé sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    degres = angle * 180 / (float)Math.PI - rotation;
    Sa me donne des angles bizarres.
    Après pleins de tentatives, je ne sais pas quoi faire.

    Pouvez vous m'aidez svp.
    Pourquoi mélange tu les degrés et les radians ?
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par rotrevrep Voir le message
    Pourquoi mélange tu les degrés et les radians ?
    C'est que je sais pas trop la différence. Tu peux m'expliquez stp.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Sinon, il y a forum spécial XNA, dans la rubrique Jeux : http://www.developpez.net/forums/f10...eux-video/xna/

    Pour convertir des angles en radians ou en degrées, XNA propose deux fonctions dans Math.

    -> http://msdn.microsoft.com/en-us/libr...toradians.aspx
    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
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut
    360° <=> 0 (2 π).
    Déjà, tu dois savoir que les radians sont orientables, c'est à dire que pour 180°, tu peux avoir π ou -π.
    Dans ton cas tu devrais utiliser les radians, car t veux que ton perso tournes soit à gauche, soit à droite.

    va lire cette page wiki avant de te lancer dans de grands travaux : http://fr.wikipedia.org/wiki/Fonctio...om%C3%A9trique
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    J'utilise les radians. Pour dessiner l'ennemi, je fais sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Main.spriteBatch.Draw(Main.ennemiTexture, position, null, Color.White, MathHelper.ToRadians(rotation), origin, 1, SpriteEffects.None, 0);
    Je calcule l'angle entre le vector2 de l'ennemi et celui du joueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    angle = (float)Math.Atan2(Main.player.position.Y - position.Y, Main.player.position.X - position.X);
    degres = angle * 180 / (float)Math.PI;
    Si je me met juste a droite de l'ennemi, j'ai un angle de 0° ou si je me met a gauche, j'ai un angle de 180°. Donc sa fonctionne.
    Le problème c'est que si j'effectue une rotation a l'ennemi par exemple :
    L'ennemi pointe vers le bas(normale). Seulement si je met met a droite de l'ennemi, j'ai un angle de 0° alors que dans la logique je devrai avoir un angle de 90°.

    Pouvez vous m'aidez a régler ce problème svp ?

  7. #7
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut
    • -π/2 = 90° = Bas
    • -π = 180° = Gauche
    • π/2 = 270° = Haut
    • 0 = Droite


    je te conseille d'écrire directement en radians, pour bien comprendre la notion de direction. Comme je l'ai dit avant, les degrés ne sont pas orientés. Et va visiter le lien de littlewhite
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Ok mais j'ai du mal à comprendre. Quelqu'un pourrai t-il me faire un exemple en code svp. J'arrive mieux à comprendre comme sa

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    @rotrevrep et si tu fais -90° cela donne quoi, d'après toi ? Moi je ne vois pas le soucis d'orientation.

    Je pense que le problème vient de l'utilisation des angles dans le reste du code. Notamment car je doute que la fonction de rotation accepte des angles en degrés.

    De plus, j'insiste d'utiliser les MathHelper de XNA !
    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.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Ok, c'est vrai que je suis un peu embrouiller avec les rotations, angles etc. Quelqu'un peux bien m'expliquez tout sa et avec un exemple en code svp.

    C'est bien la fonction Math.Atan2 pour les angles ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Pour connaître l'angle entre deux éléments, on peut utiliser un Dot product (il y a une fonction toute prête pour cela dans XNA). Ensuite, il suffit de faire acos du résultat du doc product afin d'avoir l'angle, qui permettra de faire la rotation voulue.
    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.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Je sais faire des angles. Le problème c'est que si je fais tourner mon sprite ennemi a gauche(donc de 180°), si je met le personnage a gauche de l'ennemi, il me met qu'il y a un angle de 180° a lors que il devrai être a 0°.

    L'angle est calculé toujours à partir de la droite du Vector2 et il prend pas en compte la rotation de l'ennemi.

    Comment je fais pour régler ce problème svp.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Finalement j'ai fini par régler mon problème.
    Je mets la solution au cas où une personne tomberait sur le même problème que moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public float rotation;
    public float radianToPlayer;
    public float degresToPlayer;
    public float seeAngle = 45;
     
    radianToPlayer = (float)Math.Atan2(Main.player.position.Y - position.Y, Main.player.position.X - position.X);
    degresToPlayer = MathHelper.ToDegrees(radianToPlayer) - rotation;
     
    public bool SeePlayer()
    {
    	if (Math.Abs(rotation) > 90)
    	{
    		if (Math.Abs(degresToPlayer) < seeAngle)
    			return true;
    		else if (Math.Abs(degresToPlayer) > 360 - seeAngle)
    			return true;
    	}
    	else
    	{
    		if (Math.Abs(degresToPlayer) < seeAngle)
    			return true;
    	}
     
    	return false;
    }
     
    if(SeePlayer())
         //L'ennemi voit le joueur.

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

Discussions similaires

  1. Pygame - Probleme rotation
    Par Loenix dans le forum Programmation multimédia/Jeux
    Réponses: 7
    Dernier message: 06/11/2012, 09h55
  2. Probleme Rotation (avec ou sans quaternion)
    Par Scheb dans le forum Moteurs 3D
    Réponses: 6
    Dernier message: 01/05/2012, 19h07
  3. [C# XNA] probleme tileLayer
    Par Exec57 dans le forum C#
    Réponses: 0
    Dernier message: 14/04/2012, 11h17
  4. [XNA]Probleme de chargement de texture
    Par Xnacy dans le forum C#
    Réponses: 2
    Dernier message: 02/06/2011, 10h02
  5. [OpenGL] probleme rotations/ translations
    Par Daemonkii dans le forum Windows
    Réponses: 4
    Dernier message: 16/12/2007, 17h42

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