2014-07-04 4 views
-2

내 populateArrayEnemy 메서드에서 배열을 20 개의 개체로 채우고 끝에 모두 인쇄합니다.
하지만 페인트와 업데이트 방법에서 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 
} 

그리고 당신은 그것을 리팩토링 고려해야합니다. 귀하의 버그가있는 것으로 나타납니다 as.populateArrayEnemy(..) 그것은 주석 처리 되었기 때문에 호출되지 않습니다.

+0

감사! 이제 작동합니다. – RomZes

관련 문제