2014-07-04 98 views
-2

在我的populateArrayEnemy方法中,我用20個對象填充數組,然後在最後打印它們。
但是在我的paint和update方法中,enemyShip.size返回0. 我哪裏出錯了?ArrayList大小返回0

更新: 我的主要方法如下。

public class ActionEnemyShip { 
EnemyShip es; 

public ArrayList<EnemyShip> enemyShip = new ArrayList<EnemyShip>(); 

// Updating coordinates method ////////////// 

public void populateArrayEnemy(MainClass mc){ 
    int Min = 0, Max=800, result; 

    for (int i =0; i <=20; i++){ 
      x = Min + (int)(Math.random() * ((Max - Min) + 1)); 
       y = 0 + (int)(Math.random() * ((600 - 0) + 1)); 
      EnemyShip es = new EnemyShip(x,y); 

      enemyShip.add(es); 

     } 
    System.out.println(enemyShip); 
} 

public void update(MainClass mc, Player p){ 

    for (int i = 0; i < enemyShip.size(); i++) { 
     EnemyShip es = new EnemyShip(); 
     es = enemyShip.get(i); 
     es.setX(es.getX()+ENEMY_SHIP_SPEED); 
     enemyShip.set(i, es); 
    } 
} 

// Paint method ////////////////////// 

public void paint(Graphics g, MainClass mc) { 
    url = mc.getDocumentBase(); 
    enemyShipImg = mc.getImage(url, "craft.png"); 

    System.out.println("    paint "+enemyShip.size()); 
     for (int i = 0; i < this.enemyShip.size(); i++){ 
      EnemyShip es = new EnemyShip(); 
      es = this.enemyShip.get(i); 
      g.drawImage(enemyShipImg, es.getX(), es.getY(), mc); 
     } 

這是我的主要方法

public void init() 
{ 
    setSize(800, 600); 
    es = new EnemyShip(); 
    as = new ActionEnemyShip(); 
    //as.populateArrayEnemy(mc); 
} 
public void start() {thread.start();} 
public void destroy() {running = false;} 
public void stop() {running = false;} 
public void run() 

{ 
    while(running) 
    { 
     as.update(this, p); 

} 

public void paint(Graphics g){ 

    as.paint(g, this); 

} 
+2

populateArrayEnemy在update/paint之前調用? –

+0

顯示你的'main()'方法。 –

+0

是的,我把它從Player類調用爲= new ActionEnemyShip(); \t \t as.populateArrayEnemy(mc); – RomZes

回答

2
public void init() 
{ 
    setSize(800, 600); 
    es = new EnemyShip(); 
    as = new ActionEnemyShip(); 
    //as.populateArrayEnemy(mc); <== this is not happening 
} 

一般來說,這種代碼是很寫得不好,你應該考慮重構它。你的bug似乎是as.populateArrayEnemy(..)沒有被調用,因爲它被註釋掉了。

+0

謝謝!它現在有效。 – RomZes

相關問題