Snake没有出现在Java游戏的框架中

时间:2014-09-16 13:52:07

标签: java swing

我正试图在java中制作蛇游戏,但蛇并没有出现在屏幕上,我不知道为什么......这是我的代码...我已经制作了它分为三类

 public class SnakeGame extends JFrame {

 public SnakeGame(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBackground(Color.green);
    setSize(WIDTH, HEIGHT);
    setTitle("Snake Game");
    setVisible(true);
    setResizable(false);
     play p = new play();
     add(p);
     pack();
}

public static void main(String[] args) {
    new SnakeGame();
}
}



public class play extends JPanel implements Runnable{

public static final int WIDTH = 700,HEIGHT = 700;
private ArrayList<SnakeDesign> snake;

public play(){
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    snake = new ArrayList<SnakeDesign>();

}

public void paint(Graphics g){
    for(int i=0;i<snake.size();i++){
        snake.get(i).paintSnake(g);
       }
     }

@Override
public void run() {
    repaint();
}

}

 public class SnakeDesign {

private int Xcoor, Ycoor, width, height;

public SnakeDesign(int Xcoor, int Ycoor,int tileSize){
    this.Xcoor = Xcoor;
    this.Ycoor = Ycoor;
    width = tileSize;
    height = tileSize;

}
public void paintSnake (Graphics g){
    g.setColor(Color.red);
    g.drawRect(Xcoor*width, Xcoor*height, width, height);
}

所以请有人说为什么蛇不会出现......提前谢谢

1 个答案:

答案 0 :(得分:6)

  1. 不要覆盖JPanel的paint(Graphics g)方法,而是覆盖其paintComponent(Graphics g)方法。这有很多原因,其中一些包括
    • 绘制方法负责绘制组件绘制其边框和子项,因此如果更改了Graphics对象,则可能会导致不需要的和难以调试的组件副作用。 ; s边界和子组件。
    • JPanel或JComponent的paintComponent方法默认使用双缓冲,所以如果你将它用于动画(并且你使用它)会给你一个明显更平滑的动画。
  2. super.paintComponent(g)覆盖中调用超级paintComponent(Graphics g)方法。
  3. 您已创建了Runnable,但我没有看到您将其放入线程或启动线程。
  4. 在添加所有组件之后,请始终致电setVisible(true) 最后,而不是之前。
  5. 班级名称应以大写字母开头。
  6. 你在哪里添加元素到你的ArrayList中,也就是说,你在哪里有snake.add(...)将一个体元素传递给蛇?如果你给你的蛇没有身体,它会显示什么?
  7. 使用Swing Timer来驱动动画。这将允许您摆脱对Runnable接口的需要(目前只调用run(),因此它实际上什么都不做)。