我正在尝试制作一个蛇游戏,因为我使用了一个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);
}
}
答案 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);
}