현재 게임용 맵 편집기를 만드는 중이며 조금 복잡합니다.목록을 변환하는 방법 <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>
을 변환하는 것입니다.
타일을 저장하기 위해 다차원 배열을 사용하기로 결정한 이유는 프로그램에서 사용하기가 쉽고 빠르기 때문입니다. 목록을 사용하면지도 작업 공간에 타일을 추가 할 때 프로그램이 상당히 느려집니다.
'TileList' 속성의'set' 부분을 구현하는 것을 고려 했습니까? – MarcinJuraszek
예. 내가 이것을 할 때 가장 중요한 문제는 맵의 너비와 높이를 잡아서 그 속성들로'Tile [,]'을 만들 수 없다는 사실이다. 맵에 레이어를 추가하면 다음 코드로 빈'Tile [,]'이 생성됩니다. 'Layer.Tiles = new Tile [(int) Math.Floor ((Double) (MapSize.Width/TileSize)), (int) Math.Floor ((double) (MapSize.Height/TileSize))] – Dragonphase
왜이 값들을 클래스에 저장하지 않습니까? 필요한 모든 데이터를 사용하지 않고도 상태를 재현하려는 것 같습니다. – MarcinJuraszek