Java小游戏,防止物体与(交叉)矩形块碰撞的算法

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;}
					}		
		}
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值