移動可能な長方形を複数の長方形と衝突させるのに問題があります。
私はSFMLを使用していて、intersects
2つの四角形を取り、その交差部分を返すという便利な関数があります。移動可能な四角形を衝突させたい四角形でいっぱいのベクトルがあります。私は次のコードを使用してこれをループしています(pは移動可能な四角形です)。
IsCollidingWith
ブール値を返しますがintersects
、交点を計算するためにSFMLも使用します。
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()
か?