*
# 这里是控制蛇移动的代码
public void move_on() { paint p1=new paint(); Fruit fruit=new Fruit(); Snake snake=new Snake(); Move read=new Move(); /* * 对第一个元素即蛇头进行判断,根据所指方向对x,y坐标进行操作 * 完毕后重绘界面,达到动态移动效果 */ new Thread(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 while(Snake.life){ switch (Model.snake.get(0).direction) { case 8: Model.snake.get(0).point.y+=General.y_height; p1.repaint(); break; case 2: Model.snake.get(0).point.y-=General.y_height; break; case 4: Model.snake.get(0).point.x-=General.x_width; break; case 6: Model.snake.get(0).point.x+=General.x_width; break; default: break; } System.err.println(Model.snake.get(0).point.x+" "+Model.snake.get(0).point.y); //调用绘制方法进行重绘 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 p1.repaint(); //对蛇体进行移动操作,即每一个节点都到了前一个节点的位置上 for(int i=1;i
# 这里是绘制蛇和果子的方法
public void paintComponent(Graphics g) { super.paintComponent(g); System.err.println("调用绘制方法"); snake_paint.drawSnake(g); /* * 当蛇长为1(即刚初始化游戏)的时候 * 或判断果子被吃掉后 * 才能绘制果子 */ if(Snake.Long==1||fruit_paint.isEaten()) { fruit_paint.drawFruit(g); } public void drawSnake(Graphics g)** { super.paintComponent(g); Model model=new Model(); g.setColor(Color.BLACK); System.err.println("调用绘制蛇体方法"); for(Move r:model.snake) g.fillRect(r.point.x,r.point.y, General.x_width, General.y_height); }` public void drawFruit(Graphics g) { g.setColor(Color.RED); g.fillRect(location.x, location.y, General.x_width,General.y_height); }
小弟现在面临的问题是:1.绘制方法调用了,但是面板毫无动静,依然是第一次值的位置。看了一下断点和输出,值是传给了绘制方法的。
是不是界面刷新问题?在move_on方法里面新建了一个线程,不知道用对没。
2.有时候值会大于定下的边界(y=700),而继续增加一点,比如到了750才停下,是不是线程冲突的问题?
3.,除了第一次调用绘制方法的时间正确以外,其他的时间都不对,不是每一个switch判定之后马上就调用。而是在判定游戏结束(蛇头位置大于容器边界)之后一直调用。
欢迎选择我的课程,让我们一起见证您的进步~~