저는 2 차원 타일 기반 (직각 타일) iPhone 게임을 코딩하고 있습니다. 모든 레벨은 앱이 처음 재생 될 때 절차 적으로 생성 된 다음 사용자가 새지도를 원할 때까지 지속됩니다. 지도는 폭이 넓고 높이가 1,000 타일이므로 지형은 파괴적입니다. 현재로서는 Terraria과 다소 비슷하지만 변경 될 것입니다.대형 런타임 생성 타일 맵을 효율적으로 처리 할 수 있습니까?
지도/타일 정보를 보관하려면 현재 2 차원 C 스타일 배열을 여러 개 사용하고 있습니다. 이것은 잘 작동하지만 어레이의 크기가 모두 (1000 * 1000 * sizeof (short)) 바이트를 차지하는 short array[1000][1000]
으로 정의되어 있으므로이 메모리가 차지하는 메모리의 양에 대해서는 우려하고 있습니다.
특히 사용자가 멀티 태스킹을 할 때 엄청난 양의 메모리가 필요하지 않은 경우에는 그리 바람직하지 않습니다. 주된 문제는 모든 레벨이 절차 적으로 생성되기 때문에 .tmx와 같은 특정 타일 맵 형식을 사용할 수있는 방법이 없다는 것입니다. 성능이 문제가 될 수도 있습니다. 왜냐하면 타일이 인덱스 (x, y)에서 삭제되면 해당 인덱스의 데이터를 변경해야하기 때문입니다. 타일 맵 데이터를 텍스트 파일로 작성하는 것도 고려해 봤지만 데이터를 액세스하거나 변경할 때 어려움이나 성능 문제가 있다고 생각합니다.
이 점을 염두에 두면서 타일 데이터를 효율적이고 빠르게 처리하는 방법은 무엇입니까?
절차 적으로 생성 된 경우 전체를 생성하지 않고 필요시 타일 값을 생성 할 수없는 이유는 무엇입니까? –
좋은 지적입니다. 주로 프로세스 때문입니다. 내지도는 타일을 배치하는 [drunkard walk] (http://pcg.wikidot.com/pcg-algorithm:drunkard-walk) 방법을 사용합니다. 나는 프로세스의 성격 때문에 한 번에 모든 것을 제외하고 이것을 어떻게 할 것인지 모른다. –