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是不同的 我该怎么办呢 谢谢
答案 0 :(得分:2)
paintComponent(...)
方法需要调用super方法,可能是它内部的第一个方法调用:super.paintComponent(g)'
。这将清除之前绘制的任何图像。这是你的主要问题。例如,
@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);
}