如何在使用drawimage和重绘时替换旧图像

时间:2014-01-29 17:21:43

标签: java swing paintcomponent repaint motion

import java.awt.*;
import javax.swing.*;
import java.util.concurrent.TimeUnit;
public class testing extends JPanel{

  //this is the testing game board
 public static void main(String[] args)throws Exception{
  pussy p=new pussy();
  JFrame f=new JFrame("HI");
  f.setSize(500,500);
  f.setVisible(true);
  f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  f.add(p);


 //if hit then repaint
 //testing
  for(int i=0;i<1000;i++){
    TimeUnit.SECONDS.sleep(1);
    p.repaint();}
}





}


  import java.awt.*;
  import javax.swing.*;
  import java.io.*;
  import javax.imageio.*;

  public class pussy extends JPanel{

int x;  //xcoord of pussy
int y;  //ycoord of pussy
int h=500;  // height of the game board 
 int w=500;  // width of the game board
int hp=50;  // height of the pussy
int wp=30;  // width of the pussy
Image image;
pussy(){
try {                           
           image = ImageIO.read(new File("pussy.png"));
      }
       catch (Exception ex) {
           System.out.println("error");
       }         
 }


@Override
   public void paintComponent(Graphics g) {
       nextlevel(h,w); 
       g.drawImage(image,x,y,wp,hp,null);
  }    


   //create a random x,ycoord for the new pussy 
   public void nextlevel(int h, int w){ 
    this.x=(int)(Math.random()*(w-2*wp));
    this.y=(int)(Math.random()*(h-2*hp));


}
 }

我的代码有2个类 我希望我的形象移动,但...... 它继续在Frame上添加新图像,但我总是想要替换 即一次只有一个屏幕上的图像 我在替换之前使用drawoval,但这次drawimage是不同的 我该怎么办呢 谢谢

1 个答案:

答案 0 :(得分:2)

  1. 你的paintComponent(...)方法需要调用super方法,可能是它内部的第一个方法调用:super.paintComponent(g)'。这将清除之前绘制的任何图像。这是你的主要问题。
  2. 你不应该像你正在做的那样在你的Swing程序中进行睡眠或暂停,因为一旦你将代码移出main,它就会中断。而是使用Swing Timer来制作动画。

  3. 例如,

    @Override
    public void paintComponent(Graphics g) {
      super.paintComponent(g);  // ****** be sure to add this ******
      nextlevel(h,w); 
      g.drawImage(image,x,y,wp,hp,null);
    }