2014-01-16 3 views
1

현재 게임용 맵 편집기를 만드는 중이며 조금 복잡합니다.목록을 변환하는 방법 <T> T [,]

[XmlIgnore] 
public Tile[,] Tiles { get; set; } 

[XmlElement("Tile")] 
[EditorBrowsable(EditorBrowsableState.Never)] 
public List<Tile> TileList 
{ 
    get 
    { 
     var tiles = new List<Tile>(); 
     for (var x = 0; x < Tiles.GetLength(0); x ++) 
     { 
      for (var y = 0; y < Tiles.GetLength(1); y ++) 
      { 
       tiles.Add(Tiles[x, y]); 
      } 
     } 
     return tiles; 
    } 
} 

이 코드가 있습니다 : 나는, 나는 다음과 같은 코드를 사용하고 (타일 [,])지도 작업 공간에 그려집니다 타일을 저장하고, XML에 다음을 절약하기 위해 다차원 타일 배열을 사용하고 있습니다 나 성공적으로 XML 형식으로 만드는지도를 변환합니다. 타일은 소스 타일셋 이미지 위치를 문자열로, 타일셋 이미지의 소스 점 위치 및 타일의 점 위치를 맵에 유지합니다. 타일 ​​플래그와 같은 다른 속성은 성공적으로 저장됩니다.

문제는지도를로드 할 수 있도록이 XML 파일을 deserialize 할 때 TileList 속성에 도달하면 문제가 있다는 것입니다. 내가하고 싶은 일은 List[,]으로 읽은 List<Tile>을 변환하는 것입니다.

타일을 저장하기 위해 다차원 배열을 사용하기로 결정한 이유는 프로그램에서 사용하기가 쉽고 빠르기 때문입니다. 목록을 사용하면지도 작업 공간에 타일을 추가 할 때 프로그램이 상당히 느려집니다.

+1

'TileList' 속성의'set' 부분을 구현하는 것을 고려 했습니까? – MarcinJuraszek

+0

예. 내가 이것을 할 때 가장 중요한 문제는 맵의 너비와 높이를 잡아서 그 속성들로'Tile [,]'을 만들 수 없다는 사실이다. 맵에 레이어를 추가하면 다음 코드로 빈'Tile [,]'이 생성됩니다. 'Layer.Tiles = new Tile [(int) Math.Floor ((Double) (MapSize.Width/TileSize)), (int) Math.Floor ((double) (MapSize.Height/TileSize))] – Dragonphase

+3

왜이 값들을 클래스에 저장하지 않습니까? 필요한 모든 데이터를 사용하지 않고도 상태를 재현하려는 것 같습니다. – MarcinJuraszek

답변

0

그냥 이런게 아니니?

+0

지도의 너비와 높이는 기본적으로 480x480이지만 새지도를 만들 때마다 새 크기를 정의 할 수 있습니다.내가지도를 저장하면 같은 모든 데이터를 직렬화 : 지도 : 목록 : 목록 내가이 데이터를 역 직렬화 할 때 문제는, 내가 타일 그래서 어떻게지도 폭을 얻는 아이디어와 높이를하지 그것을 사용할 수 있습니다. – Dragonphase

+1

정수 나누기가 자릅니다. 반올림과 다릅니다. 예를 들어 -1/2는 -1이 아니라 0입니다. – deloreyk

+0

@KevinDeLorey - 그래, 나는 그것을 잘랐다는 것을 압니다. 그러므로 무서운 따옴표에서 "반올림"합니다. 나는자를 말하기 위해 대답을 바꿀 것이다. 명확하지 않은 것에 대해 유감스럽게 생각합니다. –

관련 문제