package my.test.window;
import Java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.*;
public class ShowWidow extends Frame {
private static final int GAME_WIDTH = 800;
private static final int GAME_HEIGHT = 600;
int x,y, vx, vy;
int bounce = -1;
public ShowWidow(){
init();
x= 20;
y = 20;
vx = 20;
vy = 20;
}
private void init() {
lauchFrame();
}
private void lauchFrame(){
this.setSize(GAME_WIDTH, GAME_HEIGHT);
this.setTitle("随机运动小球");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setResizable(false);
this.setBackground(Color.GREEN);
this.setVisible(true);
new Thread(new PaintThread()).start();
}
class PaintThread implements Runnable{
@Override
public void run() {
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void paint(Graphics g) {
g.setColor(Color.RED);
g.fillOval(x, y, 20, 20);
x += vx;
y += vy;
if(x<=0){
x = 0;
vx *= bounce;
}else if(x + 20 > GAME_WIDTH){
x = GAME_WIDTH - 20;
vx *= bounce;
}
if(y <= 0){
y = 0;
vy *= bounce;
}else if(y+20 >= GAME_HEIGHT){
y = GAME_HEIGHT - 20;
vy *= bounce;
}
}
public static void main(String[] args){
ShowWidow showwindow = new ShowWidow();
}
}
上面是一个完整的小示例,实现了小球的移动,碰到边界后会朝相反的方向移动,主要是用到了vx和vy向量,值得研究。
游戏中用到的一些知识点:
我们可以求两点之间的夹角,然后设置速度,再使用三角学计算出vx和vy,然后让物体移动。