XNA 용 작은 게임 엔진을 작성 중입니다. 현재 엔티티 관리자는 업데이트하고 렌더링 할 수있는 모든 엔티티의 목록을 가지고 있습니다. 그러나이 목록을 '하위 목록'으로 나누고 싶습니다. 일부 엔티티는 렌더링이 필요하지 않을 수 있으므로 렌더링 엔티티를 비 렌더링 엔티티에서 분리하고 모든 엔티티가 업데이트되도록 표시하는 또 다른 목록을 유지하려고합니다. 그래서 thats 3 목록.C# 목록 간의 일관성
목록간에 일관성을 유지하는 방법이 있습니까? 정확히 같은 개체가 두 목록에서 참조되고 있는지 확인하려면? (객체의 사본이 아님). C++에서 우리는 렌더링하는 엔티티에 대한 포인터 배열을 가지고 있고, 그렇지 않은 엔티티에 대한 포인터를 가지고 있습니다.
이 문제는 엔티티를 실제로이 목록에 넣는 것이 아닙니다. 엔티티를 파괴하기 위해서, 나는 그 엔티티에서 단순히 '처분'bool을 true로 설정합니다. 엔티티 관리자는 모든 엔티티를 반복 할 때 'dispose'가 true로 설정된 경우 해당 엔티티에 대한 참조를 제거하고 더 이상 참조가 남아 있지 않으므로 가비지 클리너가 엔티티를 삭제합니다. 수동으로 일일이 Entities와 관련이있는 모든 목록을 살펴보고 일관성을 유지하기 위해 해당 목록에서 엔티티를 제거해야합니까?
'문제'의 또 다른 예는 쿼드 트리입니다. 나는 2 차원 게임을 가지고 있고 모든 엔티티에 대해 쿼드 트리를 생성합니다. 2 개의 그리드 위치 사이에있는 엔티티는 트리의 2 가지 분기에 있습니다. 내가 나무에서 어떻게 제거 할까? 해당 엔티티에 대한 참조를 전체 트리에서 검색 하시겠습니까? 그게 사실이라면 쿼드 트리를 가지고 조금 무의미한 것 같습니다 ..!
이 방법을 자주 호출해야하는 경우 느려질 수 있습니다. –
@Chris, 3 개의 목록을 동시에 유지하면서 동기화, 크기 조정 등을 유지 하시겠습니까? 이는 성능이 고려 사항이 아니라는 의미는 아니지만 여러 목록 접근 방식이 실제로 더 빠르다는 증거 일뿐만 아니라 Linq 쿼리를 가리키는 성능 저하를 볼 수 있습니다. –