2013-07-05 67 views
0

所以我編寫一個2D射擊遊戲中使用鼠標射擊:射擊子彈鼠標,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; 
     } 

所有子彈去正確的,但我希望他們去精確地方向鼠標。

+1

我*猜* Java。如果不是這樣,你可以給你的語言添加標籤嗎? C++? – Ryan

+0

@minitech不能是C++。班級分隔符在這裏是'.'。這是C#或Java。 –

+0

@ColeJohnson:不能是C# - 數學方法將被大寫。謝謝! – Ryan

回答

0

我想你試圖將bullet_angle轉換爲弧度,但它已經以弧度表示。本質上,bullet_speed是在角度=零時計算出來的,這是正確的。從你的cos()和sin()計算中刪除「* Math.PI/180」。

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

非常感謝您的回覆!我非常感謝你的支持! – VoidCatz