蛇不';t出现在Java游戏的框架中

蛇不';t出现在Java游戏的框架中,java,swing,Java,Swing,我正在尝试用java制作蛇游戏,但是蛇没有出现在屏幕上,我不知道为什么。。。这是我的密码。。。我已经上了三节课了 public class SnakeGame extends JFrame { public SnakeGame(){ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBackground(Color.green); setSize(WIDTH, HEIGHT); setTitle("Snak

我正在尝试用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();
}
所以请大家说说为什么蛇没有出现。。。提前谢谢

  • 不要重写JPanel的
    paint(Graphics g)
    方法,而是重写其
    paintComponent(Graphics g)
    方法。原因有很多,其中包括
    • 绘制方法负责绘制组件的边框和子组件,因此,如果更改其图形对象,可能会对组件的边框和子组件产生不必要的、难以调试的副作用
    • 默认情况下,JPanel或JComponent的paintComponent方法使用双缓冲,因此,如果您将其用于动画(并且您正在使用),则使用该方法将获得明显更平滑的动画
  • paintComponent(Graphics g)
    覆盖中调用super的
    super.paintComponent(g)
    方法
  • 您已经创建了一个Runnable,但我没有看到您将其放入线程或启动线程
  • 添加所有组件后,而不是之前,始终调用
    setVisible(true)
    last
  • 类名应以大写字母开头
  • 在哪里向ArrayList中添加元素,即在哪里有
    snake。添加(…)
    在哪里向snake中传递body元素?如果你给你的蛇没有尸体,它会显示什么
  • 使用摆动计时器驱动动画。这将允许您摆脱对可运行接口的需求(该接口目前只调用
    run()
    ,因此基本上什么都不做)

  • 您不应该重写
    paint()
    方法,而应该重写
    paintComponent()
    。看不到主题,但试试libGDX或真正的游戏引擎,Swing不是为制作游戏而设计的;)我加了snake.get(i)和paintSnake(g);但还是什么都没有appears@user3605253:但是,你在哪里有
    snake.add(…)
    什么?正如现在所写的,您的蛇的大小将是0,所以您绘制它的for循环将不会起任何作用。
     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);
    }