2012-02-11 2 views
0

저는 Xna C#에서 게임 프로젝트 용 타일 기반 맵 엔진을 작업 해 왔습니다. 대부분의 다른 시스템과 마찬가지로 시스템은 화면의 특정 위치에 매핑 된 타일 세트의 타일에 해당하는 숫자를 사용합니다. 이것은 정상적으로 작동하지만 화면에있는 모든 셀에 수동으로 입력 한 숫자가 있어야합니다. 대신, 난 그렇게처럼,이 게임 내 것 위치에서 각 타일의 수를 포함하는 .txt 인 읽기 수준의 레이아웃을하기로 결정했습니다 : 1 잔디이고 0게임 레벨은 XNA의 파일에서 읽습니다.

1111 
0110 
1001 
1100 

먼지입니다. 다시 말하지만, 저는 이것이 일반적인 기술이라는 것을 알고 있습니다. 필자가 작성한 코드는 각 행을 읽고 첫 번째 열의 다음 위치를 해당 타일 그래픽으로 설정할 수 있습니다. 이것은 괜찮지 만 나머지지도에서는 ​​도움이되지 않습니다. 나는 검색을했는데 행의 각 숫자를 별도의 숫자로 나누는 방법을 찾을 수 없으므로 첫 번째 줄에는 (0,0) = 1, (0,1) = 1 등이 표시 될 수 있으므로 그런 다음 좌표를지도의 x 및 y 위치에 일치시키고 값을 타일 유형에 일치시킵니다.

그래서 내가 원하는 것은 현재 위치 (파일에 몇 문자가 남았는지, .txt 파일에서 얼마나 많은 줄이 있는지)에 해당하는 2 차원 배열을 할당 할 수 있기 때문에 두 개의 분기 된 루프를 실행할 수 있습니다. 레벨 즉, 모든 타일 (x와 y) :

for (x=0; x<levelwidth; x++) 
{ 
    for (y=0; y<levelheight; y++) 
    { 
     Row[x].Column[y].Tile = Convert.ToInt32(filepos[x,y]); 
    } 
} 

나는 누군가가이 크게 감상 할 수있다 나를 위해이 문제에 도움이 되거 수 그래서 만약 내가,이과 복잡함을 것 같아요.

+0

제목 끝에 "C#"과 같은 것을 추가하지 마십시오. 그것이 바로 태그가있는 것입니다. –

+0

죄송 합니다만 나는 어떤 언어를 명확하게하려고 노력하고있었습니다. – GamersIncoming

+0

내가 말했듯이, 태그는 그것을 명확하게합니다. –

답변

1

성능 문제로 인해 2D 배열을 사용하지 않으려합니다.

또한, 당신은 아마 두 가지 이유에서이

1,1,1,1 
1,0,1,1 

처럼, 타일 번호 사이에 구분 기호를 사용하려면; 1 개 이상의 다른 타일을 사용할 수 있으며, 2 타일 ID를 얻고지도를 작성하기 위해 String.Split() 및 Int.Parse()를 사용할 수 있습니다.

1D 배열을 사용하려면 myMap [x] [y] 대신 myMap [y * mapWidth + x]를 사용합니다.

+0

* 2 차원 배열로 * 성능 문제 *를 확장하는 데주의해야합니까? 1d 어레이를 수동으로 인덱싱하면 어떤 이점이 있습니까? –

+0

다차원 배열 조회는 일반적으로 C#에서 일반 배열로 작업하는 것보다 느린 순서이며, 예, 수동 인덱싱은 많은 이점을 가져옵니다. OP의 유형은 실제로 다차원 배열 ([]) 대신에 "들쭉날쭉 한"배열 ([] [])이지만, 수동으로 1D 배열을 인덱싱하면 여전히 눈에 띄는 성능 향상이 있습니다. .NET4에서는 다소 개선되었다고 생각합니다. – Tobias

+0

문자열을 분할하는 것이 내가 필요한 것일 뿐이었고 알고리즘의 수 제한에 대한 요점이 있습니다. 실제로 생각하지 않았습니다. 나는 당분간 2 차원 배열을 사용하지 않을 것이다. 감사. – GamersIncoming

0

파일을 더 쉽게 편집하고 읽을 수 있도록 XML을 사용하도록 전환했습니다. 그것도 내지도에서 타일의 행의 끝을 나타낼 수있는 좋은 방법이었고, 게임에서 리더가로드하기 전에 내지도가 몇 줄/행 이었는지를 쉽게 식별 할 수있는 쉬운 방법이었습니다.

코드 샘플은 내 사이트의 "Looks Level to Me"샘플에서 찾을 수 있으며 현재 접근 방식을 변경하는 방법에 대한 아이디어를 얻는 데 도움이 될 수 있습니다.

+0

감사합니다. 지금 당장 XML로 작업하고 싶지는 않지만 앞으로는 가능할 것이라고 확신합니다. – GamersIncoming

+0

XML은 구문 분석하는 데 오랜 시간이 걸리며로드 시간이 늘어나는 형식입니다. – Tobias

0

쉼표를 사용하는 것이 가장 좋은 방법이지만, 고정 길이 인 경우 .substring을 사용하여 분리 할 수도 있습니다.

관련 문제