理论上的碰撞检测

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;

				}
			}

你可能感兴趣的:(理论上的碰撞检测)