2013-04-03 5 views
1

Хорошо, так что все, что я хочу сделать, это создать простую java-программу, в которой есть аррайалист, полный объектов, в данном случае прыгающих шаров, которые можно добавить в игру. Как я хочу, чтобы он работал, вы запускаете программу, и это пустой экран. Вы нажимаете пробел, и он создает шар, который отскакивает с боков, прижимает пространство, и он делает больше шаров. Проблема, которую я имею, хотя это то, что я добавляю больше шаров, он устанавливает каждый элемент в arraylist в те же координаты x и y. Ох и им, используя библиотеки slick2D, но я не думаю, что проблема.Все объекты в arraylist имеют одинаковое значение

здесь является основной частью программы

public static ArrayList<EntityBall> ballList; 

@Override 
public void init(GameContainer gc) throws SlickException { 
    ballList = new ArrayList<EntityBall>(); 
} 

@Override 
public void update(GameContainer gc, int delta) throws SlickException { 
    String TITLE = _title + " | " + gc.getFPS() + " FPS" + " | " + ballList.size() + " entities"; 
    frame.setTitle(TITLE); 

    Input input = gc.getInput(); 

    if (input.isKeyPressed(Input.KEY_SPACE)) { 
     addBall(); 
    } 
} 

public void render(GameContainer gc, Graphics g) throws SlickException { 
    for(EntityBall e : ballList) { 
     e.render(g); 
    } 
} 

public static void addBall() { 
    ballList.add(new EntityBall(getRandom(0, _width - ballWidth), getRandom(0, _height - ballWidth), 20, 20)); 
} 

public static int getRandom(int min, int max) { 
    return min + (int) (Math.random() * ((max - min) + 1)); 
} 

и Херес EntityBall Class

package me.Ephyxia.Balls; 

импорт org.newdawn.slick.Color; import org.newdawn.slick.Graphics;

общественного класса EntityBall {

public static int x; 
public static int y; 
public static int height; 
public static int width; 

public EntityBall(int x, int y, int width, int height) { 
    this.x = x; 
    this.y = y; 
    this.width = width; 
    this.height = height; 
} 

public void render(Graphics g){ 
    g.fillOval(x, y, width, height); 
} 

}

+0

Если вы считаете, что ответ rgettman был хорошим, вы можете принять его. (нажмите на галочку) – Justin

ответ

8

Проблема возникает потому, что ваши переменные экземпляра x, y и т.д. в EntityBall являются static, т.е. есть только одно значение каждого для всего класса , Каждый раз, когда создается новый экземпляр, значения перезаписываются. Удалите static из объявлений полей в EntityBall, чтобы были разные значения для каждого созданного шара.

+0

Это сработало благодаря тому, что я почти бросил вниз и создал массив и отдельно создавал 55 объектов. – Ephyxia

Смежные вопросы