图形运动过程中会出现如下现象:1.JPanel出现在(5,0)处,随后回到(0,0)处;
2.小方块运动到JPanel中间时变为一长条,程序继续运行,但画面不动;怀疑被另一块JPanel遮挡;
代码如下:
大神帮忙!!!!
package MiaoMiaoXia.Wuhuikai;import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Snake extends JPanel implements KeyListener{ /**
 * 
 */
private static final long serialVersionUID = 1L;
private int x;
private int y;
private boolean change=false;

public void setChange(boolean change) {
this.change = change;
} private int direction=4;
//private ArrayList<SnakeList> list=new ArrayList<SnakeList>;
Image image=new ImageIcon("d:\\1.jpg").getImage();
    public Snake(int x,int y){    
      this.x=x;
      this.y=y;
    }
    
    public void paint(Graphics g){
         super.paint(g);
     g.setColor(Color.WHITE);
     g.fillRect(0, 0, 710, 710);
     g.drawImage(image, 250, 250,this);
     g.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));
     g.fillRect(x,y, 50, 50);
    }
    
    public void setX(int x){
     this.x=x;
    }
    public void setY(int y){
     this.y=y;
    }
    public int getX(){
     return this.x;
    }
    public int getY(){
     return this.y;
    }    public int getDirection(){
     return this.direction;
    }
@Override
public void keyPressed(KeyEvent e) {
int x,y;
x=this.x;
y=this.y;
this.change=true;
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
this.y-=50;
direction=1;
break;
case KeyEvent.VK_DOWN:
this.y+=50;
direction=2;
break;

    case KeyEvent.VK_LEFT:
    this.x-=50;
    direction=3;
    break;

    case KeyEvent.VK_RIGHT:
     this.x+=50;
     direction=4;
     break;
    default:
     ;
}
if(Math.abs(this.x+25-(250+400))<425&&Math.abs(this.y+25-(250+50))<75||this.x<0||this.x>650||this.y<0||this.y>650){
this.x=x;
this.y=y;
this.repaint();
JOptionPane.showMessageDialog(this, "GAME OVER!");
System.exit(0);
}else{
x=this.x;
y=this.y;
this.repaint();
}
} @Override
public void keyReleased(KeyEvent e) {
;
} @Override
public void keyTyped(KeyEvent e) {
;
} public boolean isChange() {
return change;
}}
package MiaoMiaoXia.Wuhuikai;import javax.swing.JFrame;public class Test {
     

public static void main(String[] args){

JFrame frame =new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
Snake snake=new Snake(0,0);
snake.setBounds(0, 0, 710, 710);
frame.add(snake);
frame.addKeyListener(snake);
frame.setSize(710, 710);
frame.setVisible(true);
new ComputerControl(snake).start();
}
}package MiaoMiaoXia.Wuhuikai;import javax.swing.JOptionPane;public class ComputerControl extends Thread{
    
Snake snake;

public ComputerControl(Snake s){
snake=s;
}
@Override
public void run() {
int x,y;
int time=500;
x=snake.getX();
y=snake.getY();

while(true){
  switch(snake.getDirection()){
case 1:
snake.setY(snake.getY()-50);
break;
case 2:
snake.setY(snake.getY()+50);
break;

case 3:
snake.setX(snake.getX()-50);
break;

case 4:
snake.setX(snake.getX()+50);
break;
default:
;
}
if(Math.abs(snake.getX()+25-(250+400))<425&&Math.abs(snake.getY()+25-(250+50))<75||snake.getX()<0||snake.getX()>650||snake.getY()<0||snake.getY()>650){
snake.setX(x);
snake.setY(y);
snake.repaint();
JOptionPane.showMessageDialog(snake, "GAME OVER!");
System.exit(0);
}else{
x=snake.getX();
y=snake.getY();
snake.repaint();
}
try {
if(snake.isChange()){
time=1000;
snake.setChange(false);
}else{
time=500;
}
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}