使子弹在DirectX中与敌人发生碰撞

时间:2016-04-17 20:05:44

标签: collision-detection

我正在尝试为学校开展一个项目,但我真的很努力让我的子弹完美地击中敌人的物体。到目前为止,他们偶尔会在敌人的随机位置发生碰撞,但这只会在某些时候起作用而令人沮丧!

这是我到目前为止所做的:

     for (int i = 0; i < 200; i++){ // 200 is number of bullets I use
            for (int k = 0; k < game.enemiesVec.size(); k++){
            if ((((bullets[i].pos.x + 0.15f) >(game.enemiesVec[k].x))) && ((bullets[k].pos.x - 0.15f) < (game.enemiesVec[k].x)) &&
                (((bullets[i].pos.y) < (game.enemiesVec[k].y -0.15f)) && ((bullets[k].pos.y) > (game.enemiesVec[k].y +0.15f)))){
     //do stuff            
     game.enemiesVec[k].x = 5;
            }
            }
    }

我很无能,我知道我需要以某种方式获得物体的半径,因此它有更大的区域可以碰撞,但我不知道!

希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:0)

增加敌人的大小可以在某些情况下解决问题,但不能完全防止问题。你的子弹可能每一帧移动,导致跳跃&#34;他们的立场。现在你正在测试每个帧的当前位置对抗敌人,但是这种方法忽略了帧之间的移动。因此,如果您将半径增加到大于子弹可以在一个框架中移动的最大距离的尺寸,您可以避免这种情况,但这会导致肥胖的敌人并且仍然存在边缘情况,就像子弹只会击中边界矩形的一个小角落。一个真正的解决方案是针对边界矩形而不是单个点测试线。该线将包括运动的开始并导致结束。如果这条线与矩形相撞,子弹就会击中敌人的路径。我画了一张小图片来说明情况:

PointIntersectionProblem

通过线矩形交叉测试,您还可以摆脱敌体中的随机交叉点,因为您可以计算入口点。