源代码:
package ballGame;
/**
* 台球小游戏
*/
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import javax.swing.*;
public class BallGame extends JFrame{
static int drawCnt = 1;
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.png");
double x=200;
double y=200;
// boolean right = true;
// boolean down = true;
double degree = Math.PI/4;//3; // 设置球的角度
public String format(double value){ // 取2位小数
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.toString();
}
public void paint(Graphics g){
// System.out.println("窗口画了\t"+(drawCnt++)+"" +
// "\t次"+",\tx="+format(x)+",\ty="+format(y)); // 打印轨迹信息
g.drawImage(desk, 0,0,null);
g.drawImage(ball, (int)x, (int)y, null);
x = x + 10*Math.cos(degree);
y = y + 10*Math.sin(degree);
if((x>=790) || (x<30)) {degree = Math.PI - degree;} // 左右边界反弹
if((y>=430) || (y<70)) {degree = -degree;} // 上下界面反弹
/*
if(right)
x+=1.5;
else
x-=1.5;
if(x>=780){right=false;}
else if(x<70){right = true;}
if(down)
y+=1;
else
y-=1;
if(y>=430){down=false;}
else if(y<70){down = true;}*/
}
// 创建窗口
void launchFrame(){
setSize(856, 501);
setLocation(100, 100);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// super.windowClosing(e);
System.exit(0);
}
});
setVisible(true);
/*
while(true){
repaint();
try {
Thread.sleep(40);
} catch(InterruptedException e)
{
e.printStackTrace();
}
}*/
new PaintTread().start();
}
/**
* 重画窗口的线程
*/
class PaintTread extends Thread{
@Override
public void run() {
while(true) {
repaint();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
BallGame game = new BallGame();
game.launchFrame();
}
private Image offScreenInage = null;
//
//
// 参照飞机大战那个小项目,加了如下方法,运行时台球移动还是有鬼影(一闪一闪的),飞机大战里面的
// 飞机和炮弹不会有残影
public void update (Graphics g){
if(offScreenInage == null){
// offScreenInage = this.createImage(this.getWidth(), this.getHeight());
offScreenInage = this.createImage(856, 501);
}
Graphics gOff= offScreenInage.getGraphics();
paint(gOff);
g.drawImage(offScreenInage, 0, 0, null);
}
}
运行没问题。
请教一个问题,在飞机大战那个小游戏的实操中,通过这段代码重画窗口以消除鬼影,但是为什么在这个台球这个案例中,我也添加了,但是好像没起到作用