2017-11-30 8 views
0

내가 폭도와 플레이어 사이에서 충돌을 쓰기 위해 노력하고있어 작동하지 않는 것, 그래서 난 내 코드 먹으 렴 하나의 사각형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'만 올바르게 충돌하고, 두 번째 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의 크기가 함께 표시됩니다. 두 가지가 서로 가깝고 "하나"형식이 아니면 큰 의미가 없습니다. (즉, 지붕이있는 집과 같이 각각 모델링되었지만 함께 움직이거나 함께 머물러야 함 - 상자는 지붕에별로 적합하지 않음).

아마 플레이어가과 같이 충돌하는 경우 하나 개의 군중 소요 방법 및 검사를 만드는 더 나은 것 :

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

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

그리고 확인하는 속성으로 class Mob로 순위 및 FRAMESIZE을 넣어. 이 검사는 주먹이 거짓인지 검사하면 결합 된 메서드가 더 명확하지만 그렇지 않은 경우 플레이어 Rectangle을 두 번 계산합니다.