ICollidable 인터페이스를 구현하는 엔티티 목록이 있습니다. 이 인터페이스는 엔티티 간의 충돌을 해결하는 데 사용됩니다. 내 실체 따라서 다음과 같습니다리스트 <T> .AddRange가 잠시 지연되고 있습니다.
- 플레이어, 난을 삭제하고
- 적
- 발사체
- 항목
- 타일 각 게임 업데이트 (약 60t/S)에
게임 상태에 따라 현재 엔티티를 추가하고 추가합니다. 이 작업은 다음을 통해 수행합니다.
collidableEntities.Clear();
collidableEntities.AddRange(players);
collidableEntities.AddRange(enemies);
collidableEntities.AddRange(projectiles);
collidableEntities.AddRange(items);
collidableEntities.AddRange(camera.VisibleTiles);
보이는 타일을 목록에 추가 할 때까지 모든 것이 올바르게 작동합니다. 게임 루프를 실행하는 데 1 ~ 2 초가 걸리므로 시각적 인 문제가 발생하여 그리기가 지연되어 렌더링에서 지터를 볼 수 있습니다. 말 그대로 타일을 추가하는 선을 제거/추가 할 수 있고 지터가 발생하고 발생하지 않는 것을 볼 수 있으므로 그 선으로 좁혔습니다.
내 질문은 무엇입니까? VisibleTiles의 목록은 약 450-500 타일이므로 실제 많은 데이터가 아닙니다. 각 타일에는 무엇이 렌더링되고 어디에 있는지를 결정하는 Texture2D (이미지)와 Vector2 (위치)가 있습니다. 나는 계속 찾고있을 것이지만, 머리 위로부터 나는 처음 1-2 초의 딸꾹질이 왜 있었는지 이해할 수는 없지만 그곳에는 부드럽다.
모든 조언을 주시면 감사하겠습니다.
업데이트
I 요소의 근사 량을 초기 용량을 증가시키는 시도하지만, 차이는 관찰되지 않았다.
업데이트 요청으로
, 여기 camera.VisibleTiles
코드입니다public List<Tile>
{
get { return this.visibleTiles; }
}
당신은 미리 정의 된 크기 목록을 초기화하기 위해
overloaded constructor for List<T>
을 사용할 수 있습니다
'camera.VisibleTiles'의 코드에 액세스 할 수 있습니까? 객체 참조를주는 것 이상의 일을하고 있습니까? –
그래, 그냥 목록에 대한 참조를 반환하는 속성입니다. –
@Brian이 제안한 바에 따라 camera.VisibleTiles를 호출하지만이 코드를 목록에 추가하지 않는 코드로 바꾸십시오. 그것은'AddRange' 호출인지 느린'VisibleTiles' 호출인지를 결정합니다. – Rotem