2017-11-30 13 views
0

は、私が暴徒とプレイヤー間の衝突を書き込むしようとして動作するようには思えないので、私は自分のコードthatsの1つの四角形Collissionは

protected bool Collide() 
    { 

     PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y); 
     MobsRect = new Rectangle((int)greenMobPos.X + (int)orangeMobPos.X, (int)greenMobPos.Y + (int)orangeMobPos.Y, greenMobFrameSize.X + orangeMobFrameSize.X, greenMobFrameSize.Y + orangeMobFrameSize.Y); 

     return PlayerRect.Intersects(MobsRect); 
    } 

に両方のモブを追加しようとしているが、私の 'greenMob'だけが正しく衝突しています。第2のmob 'orangeMob'は衝突しません。私はそれらを分けて、それぞれのために衝突をチェックすべきですか?

答えて

0
protected bool Collide() 
{ 

    PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y); 
    MobsRectGreen = new Rectangle((int)greenMobPos.X , (int)greenMobPos.Y , greenMobFrameSize.X , greenMobFrameSize.Y ; 
    MobsRectOrange = new Rectangle((int)orangeMobPos.X, (int)orangeMobPos.Y, orangeMobFrameSize.X, orangeMobFrameSize.Y); 

    return PlayerRect.Intersects(MobsRectGreen) || return PlayerRect.Intersects(MobsRectOrange) ; 
} 

各暴徒とプレイヤーのバウンディングボックスを計算します。緑の境界線と交差する場合、あなたのプレーヤーは緑のものと衝突します。オレンジ色の境界ボックスと交差する場合、それはその境界ボックスと衝突します。 ||は、論理またはを意味します。

緑色とオレンジ色のXとyとを一緒にして、x + yのサイズを一緒に追加します。両方が近くにあり、「1」の形式でないとあまり意味がありません。 (つまり屋根付きの家のように、それぞれ別々にモデル化されていますが、一緒に移動/一緒になりますが、ボックスは屋根にはあまり意味がありません)。

おそらく、プレイヤーがそのように衝突した場合は、1人の暴徒を取る方法、およびチェックを作成する方が良いでしょう:

private bool CollideWithMob(Mob m) 
{ 
    // do the check for player and m here 
} 

protected bool Collide() 
{ 
    return CollideWithMob(greenMob) || CollideWithMob(orangeMob); 
} 

とプロパティをチェックするようclass Mobに順位やフレームサイズを置きます。このチェックでは、拳が偽かどうかをチェックすると、プレーヤーのRectangleが2回計算されます。結合されたメソッドはそのようにはっきりしません。