Java小游戏,防止物体与矩形块碰撞的算法
因为本人是JAVA初学者,所以下面说的这个算法会比较简单,也可能其他地方早就存在。但是,这是我自己想出来的,所以还是觉得发个文章做个纪念,嘻嘻。
算法本身很简单,其他地方就不过多叙述,直接从添加矩形碰撞检测开始。
public Rectangle getRect() {
return new Rectangle((int)x, (int)y, width, height);
}
public QiZi(int x, int y, int speed, int width, int height) {
super(x, y, speed, width, height);
}
碰撞检测后,下面提供两个算法代码,第一个是单独的矩形和矩形碰撞检测代码:
public class PengZhuang extends GameObject{
public PengZhuang(QiZi qiZi,FangKuai k) {
boolean peng = k.getRect().intersects(qiZi.getRect());
if(peng) {
qiZi.y=qiZi.y-qiZi.speed;
qiZi.x=qiZi.x+qiZi.speed;
}else {qiZi.x=qiZi.x-2qiZi.speed;
qiZi.y=qiZi.y-2qiZi.speed;
}
}
}
第二个算法带码就是一个矩形和另外两个交叉矩形的碰撞检测,这个算法的核心是以十字交叉的矩形中心为出发点,保证另一个矩形不能从交叉矩形中心穿过的算法,这个用于物块移动在众多矩形交叉且较多的情形,代码如下,由于比较简单,就不过多叙述了,有问题欢迎留言。
public class PengZhuang extends GameObject{
public PengZhuang(QiZi qiZi,FangKuai k) {
boolean peng = k.getRect().intersects(qiZi.getRect());
if(peng) {
if(qiZi.down) {
qiZi.y=qiZi.y-qiZi.speed;
if(qiZi.left) {
qiZi.x=qiZi.x+qiZi.speed;}
else if(qiZi.right) {qiZi.x=qiZi.x-qiZi.speed;}
}
else if(qiZi.up) {
qiZi.y=qiZi.y+qiZi.speed;
if(qiZi.left) {
qiZi.x=qiZi.x+qiZi.speed;
}else if(qiZi.right){qiZi.x=qiZi.x-qiZi.speed;}
}
else if(qiZi.left) {
qiZi.x=qiZi.x+qiZi.speed;
if(qiZi.up) {
y=qiZi.y+qiZi.speed;
}else if(qiZi.down){qiZi.y=qiZi.y-qiZi.speed;}
}
else if(qiZi.right) {
qiZi.x=qiZi.x-qiZi.speed;
if(qiZi.up) {
qiZi.y=qiZi.y+qiZi.speed;
}else if(qiZi.down){qiZi.y=qiZi.y-qiZi.speed;}
}
}
}
}