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;
}
}
理论上的碰撞检测
最新推荐文章于 2021-11-19 14:21:35 发布