为什么不工作(java中的ArrayList)?

时间:2016-04-12 16:14:05

标签: java arraylist

我正在尝试制作一个蛇游戏,因为我使用了一个ArrayList来存储制作蛇的每个单独的Point对象。以下代码创建了蛇:

private void createSnake() {
    for (int i = 0; i < maxLenght; i++) {
        snakeParts.add(new Point(head.x, head.y + (i * 16)));
    }

}

默认情况下,maxLenght设置为3,此代码仅调用一次;我想要它做的是在列的左上角创建3个Point对象,代表蛇的前三个部分,但由于某种原因,它要么只在左上角创建一个,要么创建所有三个,但是在相同的位置,我怎样才能使它发挥作用?

注意:我正在使用Timer渲染方法,所以这应该每秒发生一次(?),如果不是我可以使用什么渲染方法?

提前致谢。

编辑:这是Snake类的构造函数

public ArrayList<Point> snakeParts;
public Point head;

public Snake() {
    snakeParts = new ArrayList<Point>();
    head = new Point(0, 0);

    curDir = 1;

    createSnake();

}

编辑2:这是渲染类

public class Renderer extends JPanel {

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, Core.frame.getWidth(), Core.frame.getHeight());

    Snake snake = new Snake();
    g.setColor(Color.WHITE);
    for (Point point : snake.snakeParts) {
        g.fillRect(snake.head.x, snake.head.y, 16, 16);
    }
}

1 个答案:

答案 0 :(得分:2)

您的渲染方法是

for (Point point : snake.snakeParts) { 
   g.fillRect(snake.head.x, snake.head.y, 16, 16); 
}

所以你为每个点绘制相同的矩形。

正确的是:

for (Point point : snake.snakeParts) { 
  g.fillRect(point.x, point.y, 16, 16);
 }