//两张图循环,
public void draw(Graphics g){
g.drawImage(i.getImage(), x, y, i.getImage().getWidth(null),
i.getImage().getHeight(null), null);
g.drawImage(i.getImage(), x+ i.getImage().getWidth(null), y, i.getImage().getWidth(null),
i.getImage().getHeight(null), null);
}
public void move(){
x-=5;
if(x<- i.getImage().getWidth(null))x=0;
}
this.setVisible(true);
//在主线程中统一画图
while(true){
g=drawjp.getGraphics();
bufferedImage=new BufferedImage(drawjp.getWidth(),drawjp.getHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics ggg=(Graphics2D)bufferedImage.getGraphics();//得到图片缓存的画布
ggg.setColor(Color.WHITE);//将图片缓存的背景设为白色
ggg.fillRect(0, 0,bufferedImage.getWidth(), bufferedImage.getHeight());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0;i<list.size();i++){
Ball ball=list.get(i);
ball.drawBall(ggg);
}
g.drawImage(bufferedImage, 0,0 ,drawjp.getWidth(),drawjp.getHeight(), null);
}
//run方法类实现小球的移动
public void run(){
while (true){
if(endflag)break;//结束线程
try {
Thread.sleep(30);
} catch (Exception e2) {
e2.printStackTrace();
}
if(stopflag)continue;
move();
}
}
线程就像火影里面的忍者使用隐分身一样,它可以让计算机分身,做不同的事情,这些事可以跟主线程同时运行,所以用它来让我们画的东西动起来再合适不过了,这是一件神奇的事情 :D
首先我们创建一个画球的线程,在run方法里面写一个死循环,然后里面执行球移动(实际上就是改变球的坐标啦)的方法,画球的方法并不在这个线程里执行,而是在主线程里画,将启动的画球线程用队列存起来,然后在主线程里遍历所有线程的画球的方法,统一画在主线程里的缓存图上,然后这些图一每秒100次的速度画在面板上,这样动态图看起来就流畅多了,代码如上
还可以写一个画背景图的线程,在这个线程里面用一张首尾像似的图画两张循坏,让背景移动起来,在加一个走动的人,一幅动画图就粗来了,高大上的赶脚,哈哈