2010-04-29 4 views
3

J'ai commencé à apprendre la physique du jeu et j'essaie de déplacer une balle avec un angle. Mais ça ne change pas son angle. Le système de coordonnées Java est un peu différent et je pense que mon problème est là. Voici mon code.Java: déplacer la balle avec l'angle?

Ceci est pour le calcul de x et la vitesse de y:

scale_X= Math.sin(angle); 
scale_Y=Math.cos(angle); 
    velosity_X=(speed*scale_X); 
velosity_Y=(speed*scale_Y); 

Ceci est pour boule mobile en fonction run():

ball.posX =ball.posX+(int)velosity_X; 
    ball.posY=ball.posY+(int)velosity_Y; 

je (int)velosity_X et (int)velosity_Y parce que dans ball classe I tire objet

g.drawOval(posX, posX, width, height); 

et ici g.drawOval requiert int. Je ne sais pas si c'est un problème ou non. Aussi si j'utilise l'angle 30 ça va + X et + Y mais si j'utilise l'angle 35 ça va -X et -Y. Je n'ai pas compris comment travailler le système de coordonnées en Java. Mathsin() et Math.cos() attendent l'angle en radians

+1

changer 'velosity' pour' velocity' Ça ne marchera pas mais il serait plus facile à lire: P – OscarRyz

+0

@Oscar :) merci pour le conseil – Ercan

+0

Ne pas être pédant (et, à la fin, ce n'était pas lié à votre problème) mais le «système de coordonnées» n'est pas dicté par Java (langage) mais par la bibliothèque graphique particulière que vous utilisez. Dans votre cas, je suppose, java.awt.Graphics (Java 2D API) – leonbloy

Répondre

7

Vous devriez transformer vos angles en radians (angle * Math.PI/180).

+0

Je l'ai changé mais son angle ne change pas. Je peux voir dans la console que Velosity_X et Y changent mais la bille ne change pas son angle. J'ai utilisé la classe qui étend JPanel et dessine ma bille ici et dans la classe Main j'ai utilisé JFrame et f.getContentPane(). Add (velosity); – Ercan

+0

Je l'ai réparé.Conversation travaillé.J'ai utilisé un peu où la valeur erronée .C'était erreur. – Ercan

2

Utilisez Math#toRadians()

scale_X = Math.sin(Math.toRadians(angle)); 
scale_Y = Math.cos(Math.toRadians(angle)); 
2

Vérifiez vos types. Vous voulez probablement que tout soit flottant parce que vos variables d'échelle vont être inférieures à un, supérieures à zéro. Si elles sont multipliées par ints, il y a de fortes chances que vous finissiez par convertir en 1 ou 0 tout le temps. Je ne suis pas complètement sûr de cela, je coderais quelques équations simples pour m'assurer (plutôt que de mémoriser toutes les règles) si j'étais vous. Une façon de le faire est de baisser vos flottants (ou doubles) en int au dernier moment possible (lorsque vous devez passer les valeurs à un appel de méthode). C'est un peu exagéré mais cela ne fait pas mal à tout sauf au CPU que vous n'utilisez pas de toute façon - et cela peut empêcher les bugs.

+0

Est-ce que j'utilise int ou Float? Si je veux obtenir des mouvements fluides, le flottement n'est pas un bon choix? Mais mon ball.posX doit être int et à la fin j'obtiens une valeur INT. – Ercan

Questions connexes