我很难让一个可移动的矩形与多个矩形碰撞。
我正在使用SFML,它有一个方便的函数intersects
,它需要2个矩形并返回交集。我有一个充满矩形的向量,我希望我的可移动矩形发生碰撞。我使用以下代码(p是可移动矩形)遍历此代码。
IsCollidingWith
返回布尔值,但也使用SFML intersects
来计算交叉点。
while(unsigned i = 0; i!= testRects.size(); i++){
if(p.IsCollidingWith(testRects[i]){
p.Collide(testRects[i]);
}
}
和实际的Collide()
代码:
void gameObj::collide( gameObj collidingObject ){
printf("%f %f\n", this->colliderResult.width, this->colliderResult.height);
if (this->colliderResult.width < this->colliderResult.height) {
// collided on X
if (this->getCollider().left < collidingObject.getCollider().left ) {
this->move( -this->colliderResult.width , 0);
}else {
this->move( this->colliderResult.width, 0 );
}
}
if(this->colliderResult.width > this->colliderResult.height){
if (this->getCollider().top < collidingObject.getCollider().top ) {
this->move( 0, -this->colliderResult.height);
}else {
this->move( 0, this->colliderResult.height );
}
}
和IsCollidingWith()
代码是:
bool gameObj::isCollidingWith( gameObj testObject ){
if (this->getCollider().intersects( testObject.getCollider(), this->colliderResult )) {
return true;
}else {
return false;
}
当Rect
场景中只有1个时,这可以正常工作。但是,如果有多个Rect
碰撞,则一次解决2个碰撞会引起问题。
知道如何正确处理吗?我已将视频上传到youtube以显示我的问题。最右边的控制台显示了相交的宽度和高度。您可以在控制台上看到它正在尝试一次计算2次碰撞,我认为这就是问题所在。
最后,下图似乎很好地说明了我的问题:
collider
返回的对象是否this->getCollider()
由this->move()
?? 更新?