微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检测到碰撞,现在怎么办?

如何解决检测到碰撞,现在怎么办?

我正在检查播放器与其他所有对象之间的碰撞,它是否起作用,但是我现在该怎么办。 这就是我现在要做的,但是当玩家从下方击中某物时,它会在被击中物体的顶部传送。

我要说的是:如果掉落在物体上,则在顶部传送,当从下方撞击时将最大y速度设置为0,将侧面的最大x速度设置为?

是这样做吗?

但是这不适用于圆对撞机,那么如何使我的物体在撞击时正常停止?

for (GameObject &g : gameObjects) 
{ 

        if (BoxCollision(player,&g))
        {
            player->veLocity.y = 0;

            // set player feet location to the top of hit object
            player->transform.pos.y = g.transform.pos.y - player->sprite.height * player->transform.size.y;

            player->canJump = true;
        }
}

冲突检查:

bool BoxCollision(GameObject* g1,GameObject* g2)
{
    if (g1 != g2)
    {
        bool left = 0,right = 0,top = 0,bottom = 0;
        left = g1->transform.pos.x < g2->transform.pos.x + g2->sprite.width * g2->transform.size.x ? true : false;
        right = g1->transform.pos.x + g1->sprite.width * g1->transform.size.x >= g2->transform.pos.x ? true : false;
        bottom = g1->transform.pos.y + g1->sprite.height * g1->transform.size.y > g2->transform.pos.y ? true : false;
        top = g1->transform.pos.y < g2->transform.pos.y + g2->sprite.height * g2->transform.size.y ? true : false;

        return left && right && bottom && top ? true : false;

    }
    else return false;
}

解决方法

当您检测到碰撞时,这是因为在引擎经过一定时间后,两个对象O1和O2的边界体积相交。换句话说,您的对象O1在上一个时间步中的位置x处开始,现在在x + v * dt处两个对象相交。 (其中v = velocity和dt是您的时间步长)

首要工作是在对象O1和O2 接触的地方找到dt'(

  • 您可以将碰撞后的v = 0设置为使对象O1停止死亡;
  • 您可以将v反转(沿边界框反射后)以使O1弹开
  • 您可以将一些速度传递给O2并计算其余时间步长的运动
  • 您可以摧毁O2,并使O1沿其路径继续前进。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。