arraylist中的所有对象具有相同的值

时间:2013-04-03 20:59:49

标签: java arraylist entity slick2d

好的,所以我想做的就是创建一个简单的java程序,它有一个充满对象的arraylist,在这种情况下是弹跳球,可以添加到游戏中。我希望它工作的方式是,你启动程序,它是一个空白屏幕。你按下空间,它创造了一个球,从侧面反弹按压空间,它会产生更多的球。我有的问题是,我添加更多的球,它将arraylist中的每个项目设置为相同的x和y坐标。哦,我正在使用slick2D库,但我不认为这是问题。

这是该计划的主要部分

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类

package me.Ephyxia.Balls;

import 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);
}

}

1 个答案:

答案 0 :(得分:8)

问题出现是因为x中的实例变量yEntityBall等是static,这意味着整个类只有一个值。每次创建新实例时,都会覆盖这些值。从static中的字段声明中删除EntityBall,以便为每个创建的球提供不同的值。