理论上的碰撞检测

float x2 = X-mario->getPathLenght();
			float y2 = Y;
			float h2 = Height;
			float w2 = Widht;
			float y1 = mario->getPositionY();
			float x1 = mario->getPositionX();
			float w1 = mario->getPlayerBoundingBox().size.width;
			float h1 = mario->getPlayerBoundingBox().size.height;
			
			if ((y1>y2)&&(y1+h1<y2+h2))
			{
				if (x1<x2)//1
				{
					mario->setPositionX(x2-w1);
					mario->horizontalVelocity = 0;
				} 
				else//3
				{
					mario->setPositionX(x2+w2);
					mario->horizontalVelocity = 0;

				}
			}
			else if ((x1>x2)&&(x1+w1<x2+w2))
			{
				if (y1>y2)//2
				{
					mario->setPositionY(y2+h2);
					if (mario->getIsJumping())
					{
						mario->setIsJumping(false);
					}
				} 
				else//4
				{
					mario->verticalVelocity = -mario->verticalVelocity;
				}
			}
			else if(x1<x2&&y1>y2)//5
			{
				if (x1+w1-x2>y2+h2-y1)
				{
					mario->setPositionY(y2+h2);
					if (mario->getIsJumping())
					{
						mario->setIsJumping(false);
					}
				}
				else
				{
					mario->setPositionX(x2-w1);
					mario->horizontalVelocity = 0;

				}
			}
			else if (x1>x2&&y1>y2)//6
			{
				if (x2+w2-x1>y2+h2-y1)
				{
					mario->setPositionY(y2+h2);
					if (mario->getIsJumping())
					{
						mario->setIsJumping(false);
					}
				} 
				else
				{
					mario->setPositionX(x2+w2);
					mario->horizontalVelocity = 0;

				}
			}
			else if(x1>x2&&y1<y2)//7
			{
				if (x2+w2-x1>y1+h1-y2)
				{
					mario->verticalVelocity = -mario->verticalVelocity;
				} 
				else
				{
					mario->setPositionX(x2+w2);
					mario->horizontalVelocity = 0;

				}
			}
			else if (x1<x2&&y1<y2)//8
			{
				if (x1+w1-x2>y1+h1-y2)
				{
					mario->verticalVelocity = -mario->verticalVelocity;
				} 
				else
				{
					mario->setPositionX(x2-w1);
					mario->horizontalVelocity = 0;

				}
			}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值