JavaGUI-坦克大战03
7.线程的应用
7.1坦克子弹发射思路
纸上得来终觉浅,绝知此事要躬行。在学习了线程的基本知识之后,我们现在来实际运用一下。
在坦克大战2.0基础上添加如下功能:当玩家按一下 j 键,就发射一颗子弹。
思路:
- 当发射一颗子弹后,就等于启动了一个线程
- Hero类有子弹的对象,当按下 j 键时,我们就启动一个发射行为(线程),让子弹不停地移动,形成一个设计的效果
- 我们的MyPanel需要不停地重绘,才能出现该效果
- 当子弹移动到面板边界时,就应该销毁(把启动的子弹的线程销毁)
7.2我方发射子弹
1.创建子弹类Shot
要实现子弹不停地移动的效果,就要实现Runnable接口,创建线程,不停地改变子弹坐标
- package li.TankGame.version03;
- /**
- * @author 李
- * @version 3.0
- * 射击子弹
- */
- public class Shot implements Runnable {
- int x; // 记录子弹 x 坐标
- int y; // 记录子弹 y 坐标
- int direct = 0; // 子弹方向
- int speed = 2; // 子弹速度
- boolean isLive = true;//记录子弹(线程)存活状态
- //构造器
- public Shot(int x, int y, int direct) {
- this.x = x;
- this.y = y;
- this.direct = direct;
- }
- @Override
- public void run() {//射击
- while (true) {
- //休眠50 毫秒
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- //根据方向来改变(x,y)坐标
- switch (direct) {
- case 0://上
- y -= speed;
- break;
- case 1://右
- x += speed;
- break;
- case 2://下
- y += speed;
- break;
- case 3://左
- x -= speed;
- break;
- }
- //测试。输出坐标
- System.out.println("x=" + x + "y=" + y);
- //如果子弹移动到面板边界时,就应该销毁(把启动的子弹的线程销毁)
- if (!(x >= 0 && x <= 700 && y <= 550 && y >= 0)) {//如果不符合条件
- System.out.println("子弹线程退出...");
- isLive = false;
- break;//线程退出
- }
- }
- }
- }
复制代码 7.3.3坦克爆炸
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |