我是Java新手,我正在尝试制作一个简单的蛇游戏,但是只有一次调用paint方法,即使线程一直在运行,也不会再调用一次。我在这个网站上尝试了另一个使用另一个类的修复,但是没有用。
public class Snake extends JPanel implements Runnable {
boolean gamerunning = true;
int snake_x = 50, snake_y = 50, snake_dir = 2; //for snake_dir 1=up 2=right 3=down 4=left
int[] snake_xt, snake_yt;
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setVisible(true);
frame.add(new Snake());
(new Thread(new Snake())).start();
System.out.println("Running");
}
@Override
public void run() {
try {
while (gamerunning) {
Thread.sleep(500);
System.out.println(snake_x);
tick();
repaint();
}
} catch (InterruptedException e) {}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("painting");
g.setColor(Color.black);
g.fillRect(snake_x, snake_y, 10,10);
}
public void tick() {
System.out.println("tick");
switch(snake_dir) {
case 1:
snake_y -= 10;
break;
case 2:
snake_x += 10;
break;
case 3:
snake_y += 10;
break;
case 4:
snake_x -= 10;
break;
}
}
}
答案 0 :(得分:1)
你的问题是:你没有添加你画的蛇!
frame.add(new Snake());
(new Thread(new Snake())).start();
每一行创建一个新的Snake,第一个被绘制,第二个被移动。
尝试
Snake s = new Snake();
frame.add(s);
(new Thread(s)).start();
代替。