如何解决检测到碰撞,现在怎么办?
我正在检查播放器与其他所有对象之间的碰撞,它是否起作用,但是我现在该怎么办。 这就是我现在要做的,但是当玩家从下方击中某物时,它会在被击中物体的顶部传送。
我要说的是:如果掉落在物体上,则在顶部传送,当从下方撞击时将最大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 举报,一经查实,本站将立刻删除。