代码有点多, 实现思路, 实现键盘事件监听机制, 在监听函数中判断 按了什么键,比如按J就发送子弹. 然后启动子弹线程. 定义一个子弹类线程, 定义出子弹的所在属性和方法.
创新互联服务项目包括五台网站建设、五台网站制作、五台网页制作以及五台网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,五台网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到五台省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
写个方法,判断子弹是否击中目标,以XY坐标相交来判断
下面是我写的代码,如果有用,请采纳吧,最近正好在看进程通信的东西,正好拿你这个题练练手。
package test;
import java.util.ArrayList;
import java.util.LinkedList;
public class ProducerConsumer {
/*
* 生产者类:属性:子弹夹(生产者可以使用子弹夹)设计为线程,调用子弹夹类的push方法,向子弹夹里放入子弹
* 消费者类:属性:子弹夹(消费者可以使用子弹夹)设计为线程,调用子弹夹类的pop方法,从子弹夹里取出子弹
* 子弹类:属性:子弹编号(第几颗子弹)
* 子弹夹类:属性:存放子弹(数组),索引index(下一个要放子弹的位置)方法:push方法:向子弹夹里放入子 pop方法:从子弹夹中取出子弹
*/
private Clip clip = new Clip();
public ProducerConsumer() {
}
public void start() {
new Producer().start();
new Comsumer().start();
}
class Producer extends Thread {
public void run() {
while (true) {
synchronized (clip.bullets) {
try {
Bullet bullet = new Bullet();
int i = clip.push(bullet);
System.out.println("Producer put a bullet to clip");
Thread.sleep((long) (Math.random() * 3000));
clip.notify();
} catch (InterruptedException ie) {
System.out.println("producer is interrupted!");
}
}
}
}
}
class Comsumer extends Thread {
public void run() {
while (true) {
synchronized (clip.bullets) {
try {
while (clip.bullets.size() == 0) {
System.out.println("clip is empty , please wait");
clip.wait();
}
clip.pop();
System.out.println("Comsumer get a bullet from clip");
Thread.sleep((long) (Math.random() * 3000));
clip.notify();
} catch (InterruptedException ie) {
System.out.println("Consumer is interrupted");
}
}
}
}
}
class Bullet{
int number;
}
class Clip{
public ArrayListBullet bullets = new ArrayListBullet();//set the size is 10
int index = 0;//the next location to put the bullet
/*put a bullet into the clip*/
int push(Bullet bullet){
bullets.add(bullet);
index = bullets.size();
return index;
}
/*get a bullet from the clip*/
void pop(){
//自己写吧
}
}
public static void main(String[] args) throws Exception {
ProducerConsumer pc = new ProducerConsumer();
pc.start();
}
}
监听鼠标动作,
然后控制子弹图片移动。
然后跟目标做碰撞检测。
java 事件 消息传递机制 实际上是
1、用户点击鼠标左键。
2、操作系统触发一个事件传递个java程序。
3、java程序再去触发你代码里相关控件的ui响应或者你自己定义的Listener。
我认为想要实现你的需求的话,忽略1,在2处模拟操作系统同,传递一个事件给java程序了,这只是我的一个想法。
这个是碰撞检测算法。
简单说,你绘制的对象,比如飞机A,子弹B,都是图形,有大小、有形状的,这个形状的边角都有坐标点。
//B的矩形右侧坐标
B.RightX;
//A的矩形左侧坐标
A.LeftX;
假定它们图形都是矩形,子弹B从左侧向右侧平移,与飞机A“碰撞”,碰撞的条件,可以认为是子弹B的最右侧坐标大于等于飞机A的所在的左侧坐标。
if(B.RightX = A.LeftX)
游戏循环中不断进行这样的检测,一旦检测到碰撞成立时就认为是击中了。
进一步,并不是每个图形都是规则的矩形或者圆形,这个时候,你就要为图形自己定义一个碰撞检测图形(比如一个合适大小的圆形,大小刚好可以包裹你的对象)这个形状的坐标与对象运动关联,同步改变。通过这个碰撞检测的图形的坐标是否重合来判断是否碰撞。