ToB企服应用市场:ToB评测及商务社交产业平台
标题:
day03-线程应用
[打印本页]
作者:
半亩花草
时间:
2022-9-17 08:37
标题:
day03-线程应用
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坦克爆炸
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4