2017-02-05 19 views
1

XNA를 사용하여 학교 프로젝트로 게임을 개발 중입니다. 내 "엔터티"기본 클래스에서 "엔터티"의 특정 하위 클래스를 확인하는 코드를 만들려고합니다. 현재 충돌하고 있습니다.- 기본 인스턴스 목록을 살펴볼 때 특정 인스턴스가 어떤 하위 클래스인지 어떻게 알 수 있습니까?

을 "엔티티"

protected Entity CheckCollisionWithEntity(Vector2 pos) 
    { 
     Rectangle r = new Rectangle((int)pos.X, (int)pos.Y, _texture.Width, _texture.Height - 1); 

     foreach (Entity e in _entities) 
     { 
      if (r.Intersects(e.Collider)) 
      { 
       if(e != this) 
       return e; 
      } 

     } 

     return null; 
    } 
"적"과 같은 것입니다 "플레이어"(에

, 서브 클래스에서 :

내가 지금까지 사용하려고했습니다 것입니다 아무 변화가 없다 - "법인")의

if (CheckCollisionWithEntity(Position) is Enemy) 
     { 
      Game1.instance.reloadLevel(); 
     } 

내 문제는 내가 "적"인스턴스와 충돌 할 때이다. "reloadLevel()"메서드가 작동한다는 사실을 알고 있으며 디버그 코드로 전환하려고했습니다. 여기서 내가 뭘 잘못하고 있니? 나는 "is"레퍼런스를 오해 했습니까? 적 Collider는 다른 덜 구체적인 유형의 콜리 전 검사를 위해 일하고 있습니다.

+0

'CheckCollisionWithEntity'가 종료되고 발견 된 첫 번째 Entity가 반환됩니다. 플레이어가 둘 이상의 개체와 충돌하고 그 중 하나만적일 경우 어떻게합니까? –

+0

IEnumerable 을 반환하고 CheckCollisionsWithEntities (..) .OfType과 함께 LINQ의 힘을 사용하십시오. –

+0

@SirRufo이 함수가 familliar가 아니므로 코드에서 사용하는 방법을 지정할 수 있습니까? 미리 감사드립니다! –

답변

0

즉, is을 사용하는 방법이므로 반환 된 객체는 Enemy 객체가 아니어야합니다.

당신은 디버그 코드를 바꾸 었다고 말했습니까? 실제로 메소드가 Enemy에서 파생되었거나 파생 된 객체를 반환하고 있는지 확인 했습니까? 코드를 단계별로 실행하여 반환되는 내용을 확인하십시오. 충돌 감지 코드가 작동하지 않고 항상 null (null is someClass은 항상 false으로 계산됩니다)을 반환합니다. 귀하의 방법은 충돌로 판단되는 첫 번째 Entity 만 반환합니다. Enemy 엔티티보다 먼저 Enemy 엔티티가 감지 될 수 있습니까?

+0

내 코드가 작동했음을 알았습니다. 실제로 물리 개체 및 다른 게임 논리에 대해 2 개의 충돌 장치가 있음을 알 수 있습니다. –