2016-04-26 28 views
0

私は、回転していない矩形の2次元の衝突に取り組んでいます。私はそれを検出し、交差幅/高さ/位置を取得することができますが、私はそれを "キャンセル"することはできません。これは私が試してみました、「キャンセル」のコードです:Javascriptの矩形の衝突

if (this.bounds.intersects(player.bounds)) { 
    var intersection = this.bounds.intersection(player.bounds); 
    if (player.bounds.bottomRight().x > this.position().x) 
     player.position().subtract(intersection.width, 0); 
    else if (player.position().x > this.position().x) 
     player.position().add(intersection.width, 0); 
    else if (player.bounds.bottomRight().y > this.position().y) 
     player.position().subtract(0, intersection.height); 
    else if (player.position().y > this.position().y) 
     player.position().add(0, intersection.height); 
} 

(交差し、交差法が動作)

「これは」プレイヤーが交差することができないはずです壁です。 これは現在の効果です: collision

プレイヤーは赤い四角形で、壁は黒い四角形です。 これを修正するにはどうすればよいですか?

+0

使用しているライブラリがわからない場合は、妥当な修正方法を提案することは困難です。新しい座標が有効であることを確認する前に、赤い四角形の座標を更新することを許可しているようです。 – zzzzBov

+0

@zzzzBov私は自分自身を使用しています(これは主に楽しいものです) – MCMastery

+0

イベントに基づいて、またはレンダリングループ(e.x.'setInterval'、 'requestAnimationFrame')に基づいて位置を更新していますか? – zzzzBov

答えて

1

私はあなたの関数が交差するかどうかはわかりや交差点の仕事ではないが、私はあなたに、このかもしれ衝突を検出する方法遠くに応じて、

if (this.bounds.intersects(player.bounds)) { 
    var intersection = this.bounds.intersection(player.bounds); 
    if(intersection.width < intersection.height){ 
     if (player.bounds.bottomRight().x > this.position().x) 
      player.position().subtract(intersection.width, 0); 
     else if (player.position().x > this.position().x) 
      player.position().add(intersection.width, 0); 
    }else{ 
     if (player.bounds.bottomRight().y > this.position().y) 
      player.position().subtract(0, intersection.height); 
     else if (player.position().y > this.position().y) 
      player.position().add(0, intersection.height); 
    } 
} 

のようなものをintersection.width < intersection.heightかに基づいてプレーヤーを更新する分離示唆多かれ少なかれうまくいく。