2013-01-07 49 views
1

我正在製作Java中的自上而下射擊克隆。一個小時左右後,我能夠計算出如何定位相對於船體精靈方向的激光船。問題是,如果我移動船,那麼當我移動船時,拋射體會跟隨船的方向。正如你所看到的,這是一個問題,因爲激光應該獨立移動,而不管船在哪裏被髮射。彈道集相對於船舶位置Java

這裏是呈現我的問題代碼:

private Image ship; 
    private int ship_dx = 500; 
    private int ship_dy = 400; 
    private int ship_velocity = 5; 
    private boolean isLaser = false; 
    private static final int laser_DyOffSetOfBall = 48; 
    private static final int laser_DxOffSetOfBall = 23; 
    private Image laser; 
    private int laser_dx = ship_dx+laser_DxOffSetOfBall; 
    private int laser_dy = ship_dy-laser_DyOffSetOfBall; 
    private int laser_velocity= 10; 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.drawImage(ship, ship_dx, ship_dy, this); 
     if(isLaser){ 

      laser_dy -= laser_velocity; 
      laser_dx = ship_dx+laser_DxOffSetOfBall; 
      g.drawImage(laser,laser_dx,laser_dy,this); 
      if(laser_dy < 50) 
      { 
       isLaser = false; 
       laser_dy = ship_dy-laser_DyOffSetOfBall; 
      } 
     } 
      Toolkit.getDefaultToolkit().sync(); 
    } 

這裏的遊戲!:

IMG

+0

請複製並粘貼代碼,而不是使用圖像。這樣我們就可以運行並測試它。 – Doorknob

+0

請在這裏發帖,而不是圖片,以幫助回覆誰,以及將來的訪問者 –

+0

好吧我從圖像更改爲代碼。我很抱歉。 – Nicholas

回答

1

你只需要設置在第一次激光它是畫的x位置,因爲否則在每次重繪時,激光器會相對於船舶水平移動。要做到這一點,您可以添加另一個布爾isFirst(用於激光的第一次繪製),當isLaser首次變爲true時設置爲true,並且只在isFirst爲true時設置x位置。

boolean isFirst = true; 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(ship, ship_dx, ship_dy, this); 
    if(isLaser){ 
     laser_dy -= laser_velocity; 
     if(isFirst){ 

      laser_dx = ship_dx+laser_DxOffSetOfBall; 
      isFirst = false; 

     } 
     g.drawImage(laser,laser_dx,laser_dy,this); 
     if(laser_dy < 50) 
     { 
      isLaser = false; 
      laser_dy = ship_dy-laser_DyOffSetOfBall; 
     } 
    } else { 
     isFirst = true; 
    } 
     Toolkit.getDefaultToolkit().sync(); 
} 
+0

我嘗試了你的代碼,但令人驚訝的是,激光仍然沿着船的路線。你的代碼有意義,但我認爲代碼位於laser_dx = ship_dx + laser_DxOffSetOfBall。數學表達式適合將激光器設置到船上,但一旦激光器激發,它仍將使用ship_dx + laser_DxOffSetOfBall作爲變量laser_dx的值。 – Nicholas

+0

對不起,我的代碼有點錯誤,我只是修復了它,現在應該可以工作。 –

1

的錯誤是在線路laser_dy = ship_dy - ....

要繪製彈丸獨立的船隻位置,所以然後不使用ship_dy和ship_dy,而是將彈丸startPos存儲在單獨的可變比例在船舶運動期間不會改變;

laserStartX = ship_dx; 
laserStartY = ship_dy; 

及更高版本:

laser_dx = laserStartX + laserDxOffsetBall; 

同爲laser_dy

+0

,但即使將其分配給laserStartX,它仍將使用ship_dx的值。 – Nicholas