2013-10-29 57 views
0

我試圖從發射槍的位置發射子彈。所以當鼠標移動時,槍向一個方向移動。我希望子彈沿着槍指向的方向移動。所以我可以在任何方向開火。從演員到老鼠的軌跡旋轉如何從演員到老鼠的軌跡旋轉

我試過使用turntowards()方法。但子彈只射到屏幕的右側,無論它在哪裏旋轉。

有什麼建議嗎?

我有一個字符類:

import greenfoot.*; 

public class Gun extends Actor 
{ 
    private int speed; 
    public void act() 
    { 
     // Add your action code here. 
     MouseInfo mouse = Greenfoot.getMouseInfo(); 
     if (mouse !=null) 
      setRotation((int)(180*Math.atan2(mouse.getY()-getY(),mouse.getX()-getX())/Math.PI)); 
      move(speed); 

      if(Greenfoot.mouseClicked(null)) 
      { 
       getWorld().addObject(new bullet(getRotation()),getX(),getY()); 
       turnTowards(mouse.getX(), mouse.getY()); 

      } 

    } 

}

我有一個子彈類:

import greenfoot.*; 

public class bullet extends Actor 
{ 
    private int direction; 

    public void act() 
    { 

     setLocation(getX()+5,getY()); 

    }  
    public bullet(int dir) 
    { 
     this.direction=dir; 
    } 
} 

,我有一個壞人類:

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) 

/** 
* Write a description of class balloon here. 
* 
* @author (your name) 
* @version (a version number or a date) 
*/ 
public class baddie extends Actor 
{ 

    public void act() 
    { 

     setLocation(getX(), getY()-1); 

    }  

} 
+0

順便提一下,記得Java標準的類名稱有大寫首字母。顯然在句法上可以接受,但有時會讓事情變得混亂。 –

回答

1

問題是你的bullet :: act方法沒有做你期望的。而不是遵循方向,只需將子彈向右移動(每次調用動作時,都會將+5添加到x軸)。 P.S .:我假設bullet :: act是你在gameloop中調用的方法。

你的方向是表示以弧度爲單位的角度的整數值,是嗎?將方向表示爲2D矢量並根據它轉換子彈會更好,因爲那樣您可以將方向和速度都表示爲單個速度矢量。一些有趣的refefences來幫你:http://natureofcode.com/book/chapter-1-vectors/http://www.red3d.com/cwr/steer/(特別是在尋求行爲)。

乾杯 路易斯

+0

順便說一句,這裏是一個示例Vector2D類,可以幫助你開始。 :) http://code.google.com/p/rasterengine/source/browse/src/com/Math/Vector2D.java?r=2a77e099bfb1c7d22641ee585766f1377a798d87&spec=svn2a77e099bfb1c7d22641ee585766f1377a798d87 –