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

2D Java Discussion :

Rotation selon position de la Souris.


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Étudiant
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Rotation selon position de la Souris.
    Rebonjour!

    J'ai un nouveau problème à vous soumettre:

    Je dois pour mon jeu, créer une cible controler par la souris de l'utilisateur, jusque là, ça va, seulment le canon du char doit logiquement etre tourné vers l'endroit où se trouve la cible!! hihi! Et là, ça pose un gros gros problème.

    J'ai reussi à faire rotationner mon canon autour d'un point de mon tank (c'est deja un exploit pour moi, lol).

    Ce centre de rotation devient le centre (O) de mon repere.

    J'utilise le theoreme de Pythagore pour calculer l'angle du triangle rectangle deduit des positions du centre de rotation et de la position du curseur (comme expliquer sur cette page
    http://www.developpez.net/forums/showthread.php?t=95419).

    J'ajoute à la technique trouvé sur la page précédente les propriété du cercle trigonometrique pour que l'angle du triangle soit projeter sur le bon quart du
    repere de centre (O) et ainsi couvrir les 360° de liberté du curseur sur le repere polaire.

    Cela fonctionne en gros, mais cela fonctione mal en detail . c'est à dire qu' a vitesse normal, l'objet qui subit la rotation disparait à certain angle de rotation et bug, mais quand on tourne rapidement la souris, ça fonctionne plutot pas mal.

    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
     
                              int adj = cible_X-tank_X;
    		int opp = cible_Y-tank_Y;
    		double hyp = (adj^2+opp^2)^(1/2);
    		double cosi_a = Math.abs(adj/hyp);
    		double angl =  Math.acos(cosi_a);
    		double pi = Math.PI;
    		double angle = 0;
     
    		if (adj<0 && opp<0){angle= angl + pi;}
    		if (adj>0 && opp<0){angle= -angl;}
    		if (adj<0 && opp>0){angle= -(angl + pi);}
    		if (adj>=0 && opp>=0){angle= angl;}
    			c.setColor(new Color(100,60,80));
    			c.rotate(angle,tank_X,tank_Y);
    			c.drawRect(tank_X-40,tank_Y-30,80,60);
    Voici la partie de code qui traduit ce que je viens de dire.
    Je peux peut-etre posté un .jar pour que vous voyez visuellemnt le résultat.

    (D'ailleur j'ai un petit prob, quand je fais mon fichier .jar avec Eclipse, en precisant ma class Main, ben apres quand je double clique sur mon .jar, windows me dit qu'il trouve pas ma Class Main :s )

    En espérant quelques soutiens, je vous souhaite une bonne soirée si vous m'avez lu jusque là!!

  2. #2
    Futur Membre du Club
    Étudiant
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bon j'apporte la réponse à ma propre question, (elle m'a été apporté par le forum javagaming.org):

    Pour obtenir la rotation d'un objet grâce à la souris / vers la souris:

    Mon raisonnement était juste, le seul problème est que Java ne gère pas les chapeau ^(puissance) comm on le souhaiterait, il faut utilser la bonne vieille methode du "adj*ajd" pour ecrire "adj^2" et surtout, ne pas utiliser "^(1/2)" et y préférer la methode "Math.sqrt()" .

    Sinon, il existe une technique beaucoup plus courte que celle-ci, elle consiste à utiliser la methode "Math.atan2()" celle ci transforme des coordonnés (X; Y) en leur coordonnée polaire(rayon; angle theta):

    Ainsi en entrant mes variables "adj" et "opp" le canon de mon tank tourne bien autour de lui-meme selon l'angle formé par l'axe (position curseur- position tank) et l'axe horizontal.

    voilu, j'espere que cela pourra aider quelques internautes qui ont le même prob... Ciao et bonne nuit!

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

Discussions similaires

  1. Scroll automatique selon la position de la souris
    Par gcvoiron dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2013, 14h59
  2. [C#]Drag & Drop, problème de position de la souris
    Par debug dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 13h06
  3. Position de la souris
    Par abcd dans le forum Langage
    Réponses: 10
    Dernier message: 31/03/2005, 18h09
  4. Déterminer la position de la souris
    Par genteur slayer dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 11h01
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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