2014-07-02 60 views
-6

我被卡住了導彈部分。 keyPressed發生時,如何在Player類中添加方法fire()(來自Missile.java)。一旦我按下空間導彈射擊並添加到導彈對象的ArrayList。但沒有發生。導彈不發射

private ArrayList<Missilies> missilies; 

public Player (MainClass mc){ 
    url = mc.getDocumentBase(); 
    player = mc.getImage(url,"spaceship1.png"); 

} 

public void paint(Graphics g, MainClass mc){ 
    g.drawImage(player, x, y, mc); 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    switch (e.getKeyCode()){ 
    case KeyEvent.VK_SPACE:{ 
     // fire a missile; 

     missilies.add(new Missilies(x, y)); 
     ArrayList ms = (Missilies). 
     missilies.add(new Missilies(getX(), getY())); 
     break; 
     } 

和這裏的導彈類

public class Missilies { 

// New missile object //////// 

public Missilies(int x, int y){ 

    this.x=x; 
    this.y=y; 

    visible=true; 

} 

// Moving missiles //////// 

public void update(MainClass mc, Player p){ 
    x +=missile_speed; 
    if (x>mc.getWidth()) 
     visible = false; 
} 

// Painting //////// 

public void paint(Graphics g, MainClass mc, Player p) { 

     for (int i = 0; i < missilies.size(); i++) { 

      Missilies m = (Missilies) missilies.get(i); 
      g.drawImage(missile, p.getX(), p.getY(), mc); 
     } 


    } 

// Firing new missile /////////// 

public void fire(Player p){ 
    missilies.add(new Missilies(p.getX(), p.getY())); 
} 

// Action performed ////////// 

public void action(MainClass mc, Player p){ 

    for (int i = 0; i < missilies.size(); i++) { 
     Missilies m = (Missilies) missilies.get(i); 
     if (visible == true) 
      update(mc, p); 
     else missilies.remove(i); 
    } 
} 

}

主要類

public void init() 
{ 
    setSize(800, 600); 
    p = new Player(this); 
    e = new Enemy(this); 
} 

{ 
    while(running) 
    { 
     repaint(); 
     p.update(this); 
     e.update(this, p); 

     try 
     { 
      Thread.sleep(20); 
     } 

     catch(InterruptedException e) 
     { 
      System.out.println("Error has occured"); 
     } 

    } 



} 

public void update(Graphics g){ 
    dbImage = createImage(800,600); 
    dbg = dbImage.getGraphics(); 
    paint(dbg); 
    g.drawImage(dbImage, 0, 0, this); 

} 

public void paint(Graphics g){ 
    //g.setColor(Color.BLACK); 
    p.paint(g, this); 
    e.paint(g, this); 
} 

} 
+8

**什麼**沒有發生?導彈的東西不會發生?它會觸發但不會添加到您的列表中?它脫離目標並且會殺死你的狗? –

+0

_你的導彈必須有一些技術問題?? _ :) –

+2

歡迎來到SO。請閱讀[問]。沒有人會通過代碼牆來調試。 – OldProgrammer

回答

0

歡迎堆棧溢出!

對於你的問題的一些建議 - 請務必清理你發佈的代碼,並只發布相關部分,這是很難閱讀這樣的雜亂的代碼。正如Marc B所說,很難告訴你實際要求的是什麼,所以請清楚你的問題並告訴我們你已經嘗試了什麼。

從我所知道的情況來看,您無法通過keyPressed事件處理函數調用Missilies.fire(sic)方法。讓我們來分析一下,因爲你需要做3件事情:

  1. 創建導彈。在創建Missilies類的實例之前,其他任何操作都不會起作用。調用Missilies.fire是行不通的,因爲這就像告訴工程師發射導彈藍圖而不是實際發射導彈。 Missilies newMissile = new Missilies(x,y);
  2. 發射導彈。現在你可以在你所創建的實例調用firenewMissile.fire(this);
  3. 最後,您可以添加您已經創建你的陣列導彈:missilies.add(newMissile);

再次,它真的很難讀你的代碼,以便用一粒鹽來接受我的建議。請儘量清理問題!

編輯:根據上面有關NullPointerException的註釋說明,問題更加清楚:您沒有初始化您的錯誤ArrayList!在使用之前,你應該確保你已經初始化了你擁有的每個對象。您需要在public Player (MainClass mc)函數中使用類似missilies = new ArrayList<Missilies>();的行。我不會瀏覽所有的代碼,但是你應該檢查一下你是否已經初始化了其他每個對象。

+0

感謝您的回覆!我會處理我的代碼,並且絕對清理它。 – RomZes

+0

根據您的NullPointerException評論,我添加了一個編輯到我的答案。往上看。 –

+0

謝謝!現在都很好。 – RomZes