基本上我有一堆矩形以8个不同的角度(45度,90度等)漂浮。我在它们之间进行了碰撞检测,但有一件事仍然无法正常工作。我不知道我是不是在思考或者是什么,但我似乎无法得到正确的角度。我也试过搜索多个地方,但从我发现的东西中找不到任何东西。
注意:此处的角度系统从顶部的0开始并顺时针增加 注意:所有矩形都具有相同的质量
假设一个直线向右(90度)撞击另一个直线向左(270度)。他们会很好地相互碰撞。
现在说一个向左走的人会受到一个人的打击。在这里,我不能简单地扭转角度或任何东西。
如果您有多种方法,请考虑以下事项:除非我重新安排CD以便将其扩展到其他代码中,否则我将拥有所有矩形的位置。 CD检查两个是否重叠,而不是通过比较它们的去向。
到目前为止,除了碰撞检测之外我几乎都在研究所有的东西,今晚我只剩下让它工作并在我完成之前添加一些其他小东西。
如果你知道如何在没有硬编码的情况下使角度出现,那就太好了。在这一点上,我已经准备好对它进行硬编码(实际上不是太多),如果我只有一个矩形击中另一个(例如2),或者它们都是(ex 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,但如果它们只是矩形,那么这应该没问题。
希望这有帮助