矩形之间的碰撞检测 - 产生的角度

时间:2011-09-26 02:51:29

标签: c++ collision-detection

基本上我有一堆矩形以8个不同的角度(45度,90度等)漂浮。我在它们之间进行了碰撞检测,但有一件事仍然无法正常工作。我不知道我是不是在思考或者是什么,但我似乎无法得到正确的角度。我也试过搜索多个地方,但从我发现的东西中找不到任何东西。

注意:此处的角度系统从顶部的0开始并顺时针增加 注意:所有矩形都具有相同的质量

假设一个直线向右(90度)撞击另一个直线向左(270度)。他们会很好地相互碰撞。

现在说一个向左走的人会受到一个人的打击。在这里,我不能简单地扭转角度或任何东西。

如果您有多种方法,请考虑以下事项:除非我重新安排CD以便将其扩展到其他代码中,否则我将拥有所有矩形的位置。 CD检查两个是否重叠,而不是通过比较它们的去向。

到目前为止,除了碰撞检测之外我几乎都在研究所有的东西,今晚我只剩下让它工作并在我完成之前添加一些其他小东西。

如果你知道如何在没有硬编码的情况下使角度出现,那就太好了。在这一点上,我已经准备好对它进行硬编码(实际上不是太多),如果我只有一个矩形击中另一个(例如2),或者它们都是(ex 1)。任何一个都非常有帮助。

1 个答案:

答案 0 :(得分:1)

我认为你的意思是这样......

每个Rectangle都有这个功能,测试一下其他对象的数组。

Obstacle* obstacle = new Obstacle;
Obstacle** obstacles = obstacle*[];

For(int i = 0; i <3; i++)
{
obstacles[0] = New Obstacle(x,y, etc...);
etc...
}

或类似的东西......这有点生锈

 void collision(obstacles)
    {
        for(int i = 0; i < obstacles.sizeOf();i++)
           {
            //bottom y
            if((this.ypos + this.height) > (obstacles[i].ypos - obstacles[i].height))
                obstacles[i].doYCollision(this);


            //top y
            if((this.ypos - this.height) < (obstacles[i].ypos + obstacles[i].height))
                obstacles[i].doYCollision(this);


            //right x
            if((this.xpos + this.width) > (obstacles[i].xpos - obstacles[i].width))
                obstacles[i].doXCollision(this);

            //left x
            if((this.xpos - this.width) < (obstacles[i].xpos + obstacles[i].width))
                obstacles[i].doXCollision(this);
           }
    }

再次有点生疏,但如果你遵循它,你应该能够重新开始我正在做的事情。

然后你需要的只是结果函数调用。

void doYCollision(Obstacle obstacle)
{
  // Whatever y direction they are going do the opposite
  obstacle.yDir = obstacle.yDir * -1;
}
void doXCollision(Obstacle obstacle)
{
  // Whatever x direction they are going do the opposite
  obstacle.xDir = obstacle.xDir * -1;
}

其中yDir,xDir是当前对象的x和y速度。

我应该再次指出这是非常生疏的,没有你的一些代码,这是我得到的最好的。但无论哪种方式,这应该让你开始进入碰撞检测,上面的代码允许所有碰撞/物体/粉红色的火烈鸟/无论你有什么碰撞。我希望在同时发生多次碰撞时,它会做你想要的。

你不需要过多担心确切的角度(除非你需要其他的东西),因为速度是一个矢量质量因此同时具有速度和方向你可以通过将x和y视为两个不同的元素来获得方向。你可以使用点积法aswell =&gt;来做到这一点。 http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static,但如果它们只是矩形,那么这应该没问题。

希望这有帮助