}
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就可以明白了。其实这个游戏不是很难,只是要把里面的关系弄明白了,要把窗体作为小球的一个数据成员,然后在构造函数中将它进行初始化,这样就能将窗体和小球联系起来了。
做这个感觉最大的收获是当程序运行不是你期望的时候,可以从头看起,一步一步的点进去,只有搞清楚每一步是怎么做的,为什么要这么做,也许这样就能找到问题所在了。目前感觉自己对线程还不是很熟悉,希望通过接下来的项目能对它有一个更深入的了解。