2013-07-05 2 views
0

donc un code que je Shooter 2D ont été que vous utilisez la souris pour tirer:balles de prise de vue avec la souris, Math.atan2

timeSinceLastShot+=timeSinceLastFrame; 
     double bullet_angle = Math.atan2(MyMouseListener.getClickPosY()-posY, MyMouseListener.getClickPosX()-posX); 
     float bullet_startX = posX+(skin.getWidth()/2)-(Bullet.getImg().getWidth()/2); 
     float bullet_startY = posY+(skin.getHeight()/2)-(Bullet.getImg().getHeight()/2); 
     double bullet_speedX = Math.cos(bullet_angle * Math.PI/180)*500; 
     double bullet_speedY = Math.sin(bullet_angle * Math.PI/180)*500; 

     if(timeSinceLastShot>(1f/shotsPerSec) && MyMouseListener.isButtonClicked(MouseEvent.BUTTON1)){ 
      bullets.add(new Bullet(bullet_startX, bullet_startY, bullet_speedX, bullet_speedY)); 
      timeSinceLastShot = 0; 
     } 

Toutes les balles vont à droite, mais je les veux aller exactement dans la direction de la souris.

+1

Je suis * devinant * Java. Pouvez-vous s'il vous plaît étiqueter votre langue si ce n'était pas ça? C++? – Ryan

+0

@minitech ne peut pas être C++. Séparateur de classe est '.' ici. C'est C# ou Java. –

+0

@ColeJohnson: Ne peut pas être C# - Les méthodes 'Math' seraient en majuscules. Merci! – Ryan

Répondre

0

Je pense que vous essayez de convertir le bullet_angle en radians, mais il est déjà en radians. Essentiellement, le bullet_speed est calculé à angle = zéro, ce qui est juste à droite. Supprimez "* Math.PI/180" de vos calculs cos() et sin().

timeSinceLastShot+=timeSinceLastFrame; 

double bullet_angle = Math.atan2(MyMouseListener.getClickPosY()-posY, MyMouseListener.getClickPosX()-posX); 
float bullet_startX = posX+(skin.getWidth()/2)-(Bullet.getImg().getWidth()/2); 
float bullet_startY = posY+(skin.getHeight()/2)-(Bullet.getImg().getHeight()/2); 
double bullet_speedX = Math.cos(bullet_angle)*500; 
double bullet_speedY = Math.sin(bullet_angle)*500; 

if(timeSinceLastShot>(1f/shotsPerSec) && MyMouseListener.isButtonClicked(MouseEvent.BUTTON1)){ 
    bullets.add(new Bullet(bullet_startX, bullet_startY, bullet_speedX, bullet_speedY)); 
    timeSinceLastShot = 0; 
} 
+0

Merci beaucoup pour votre réponse! J'apprécie vraiment votre soutien! – VoidCatz