做屏保

来源:互联网 发布:mac如何散热 编辑:程序博客网 时间:2024/04/27 20:42
    这次做的是一个小球移动的屏保,总共做了两个版本。这两个版本也是有一个递进的关系,第一个版本是在一个窗体上画出一个小球,让它移动,碰到边界就让它返回并让它改变颜色。这个小游戏用到的主要是线程,实现线程共有两种方法:1、继承Thread,new Thread(){public void run(){}}.start();这时一般将while(ture){}包在匿名内部类的外面,在类的上面一定要哦休眠。如:while (true) {
// 休眠一定是在内部类外面写
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 匿名内部类
new Thread() {
public void run() {
// 没有阻塞一定要sleep()一下
x += 5;
y += 5;
repaint();
};
}.start();


}

2、实现Runnerble接口,这时只要实现run()方法即可。只这样写线程开启不了,所以Runnerble一定要结合Thread().start();才能开启线程。如何将run()与Thread结合在一起成了一个值得注意的问题,就是要将一个Runnerble对象丢进Thread(),这样,这两者就结合起来了。如:

public void run() {
while (true) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
x += speedX;
y += speedY;
// 碰撞判断
if (x < 0 || x > frame.getWidth() - r) {
speedX = -speedX;
// 调用改变颜色的函数
changeColor();
}
if (y < 0 || y > frame.getWidth() - r) {
speedY = -speedY;
changeColor();
}
}
}

     //下面这句是放在构造函数中来开启线程

      new Thread(this).start();

    这个游戏除了线程用的比较多以外,还有就是随机值的产生,随机值的产生有两种方法:1、int r1=new Random().nextInt(256);这个产生的随机值是[0,256).2、int r2=int(Math.Random()*256).注意一定不能写成int r1=new Random().nextInt(1)*256,这个得到的值永远是0,之前写的时候就写成这样,所以小球的颜色就一直是黑色。之前还是没有清楚这个函数的真正含义,不过这个通过查API就可以明白了。其实这个游戏不是很难,只是要把里面的关系弄明白了,要把窗体作为小球的一个数据成员,然后在构造函数中将它进行初始化,这样就能将窗体和小球联系起来了。

    做这个感觉最大的收获是当程序运行不是你期望的时候,可以从头看起,一步一步的点进去,只有搞清楚每一步是怎么做的,为什么要这么做,也许这样就能找到问题所在了。目前感觉自己对线程还不是很熟悉,希望通过接下来的项目能对它有一个更深入的了解。

  

0 0