现在的位置: 首页 > 综合 > 正文

反弹运动

2013年08月31日 ⁄ 综合 ⁄ 共 1417字 ⁄ 字号 评论关闭
import java.awt.*;
import java.applet.*;

public class UseDoubleBuffering extends Applet
implements Runnable {
int X, Y, moveX, moveY, width, height;
Thread newThread;
Image OffScreen;
Graphics drawOffScreen;

public void init() {
X = 0; //X坐标
Y = 0; //Y坐标
moveX = 2; //X轴位移
moveY = 3; //Y轴位移
width = getSize().width; //Applet的宽度
height = getSize().height;//Applet的高度
OffScreen = createImage(width, height);//建立次画面
drawOffScreen = OffScreen.getGraphics();//取得次画面的绘图类
}

public void start() {
newThread = new Thread(this);//建立新线程
newThread.start();
}

public void stop() {
newThread = null;//将线程设为空
}

public void paint(Graphics g) {
if (width != getSize().width || height != getSize().height)
{
//如果Applet大小变化就重新生成次画面
width = getSize().width;
height = getSize().height;
OffScreen = createImage(width, height);
drawOffScreen = OffScreen.getGraphics();
}
//清除次画面(即在次画面上绘制一个与与Applet相同大小的矩形)
drawOffScreen.setColor(Color.black);
drawOffScreen.fillRect(0, 0, width, height);
//在次画面上绘制实心园(代表小球)
drawOffScreen.setColor(Color.white);
drawOffScreen.fillOval(X, Y, 30, 30);
//将次画面贴到主画面上
g.drawImage(OffScreen, 0, 0, this);
// g.setColor(Color.white);
// g.fillOval(X, Y, 30, 30);
}

public void update(Graphics g)
{
//update函数只调用paint()函数而不是清除后再调用
paint(g);
}

public void run() {
while (newThread != null) {
repaint();//重新绘制图像
try {
Thread.sleep(50);//线程暂停50毫秒
}
catch (InterruptedException E) {}
X = X + moveX;//重新计算X、Y坐标
Y = Y + moveY;
//碰到边界时改变递增值造成反弹效果
if (X >= (width - 30)) {
X = width - 30;
moveX = -moveX;
}
if (X <= 0) {
X = 0;
moveX = -moveX;
}
if (Y >= (height - 30)) {
Y = height - 30;
moveY = -moveY;
}
if (Y <= 0) {
Y = 0;
moveY = -moveY;
}
}
}
}

抱歉!评论已关闭.