2017-12-15 3 views
0

모두들, 문제가 있습니다.2D 맵로드 - C# Monogame

제 2D 게임용지도 편집기를 만들고 있습니다.

기본적으로 나는 "Slot"개체가 있고 "Tile"개체 (슬롯에 속하고 텍스처가 있음)가 들어 있습니다. 당신이 그들을 누르고 양식을 어디서든 컴퓨터의 타일 에게 이미지를로드하기 위해 사용하는 팝업 때,

  1. 유형 펜 슬롯입니다 : 내가 슬롯의 2 개 종류가있다. 마지막으로 클릭 한 타일은 활성 타일 입니다.

  2. 유형이지도 타일입니다. 그것들은 맵처럼 보이는 32x32 슬롯입니다. 펜이 있고 그것을 클릭하면 활성 상태가되어 맵을 그릴 수 있습니다. 그러면 펜 슬롯 텍스처가 맵 텍스처에 복사됩니다.

는 지금은 텍스트 파일로 내지도를 냈습니다 (각 타일 -> Path.GetFileNameWithoutExtenson -> 저장 map.txt). 그리고 난을해야 내가 저장 한 이름을 얻을 수있는 텍스트 파일을로드 할 수 있습니다,하지만, 텍스처 무엇을해야하는지 잘 모릅니다 :

1. 내 게임이 편집기를 사용하는 것, 그래서 내 모든 텍스처를 넣을 수 맵 편집기 프로젝트의 일부 폴더 안에있는 게임에서 동일한 텍스처가 작동 할 수있는 동일한 이름입니다.

????

지도 슬롯에 텍스처를로드하는 또 다른 방법을 생각하면 누구나 저를 추천 할 수 있습니까?

편집 :

하늘 하늘 하늘 하늘 잔디 하늘 먼지 잔디 먼지

또한 텍스처의 이름은 다음과 같습니다

나는 타일로 3 × 3지도와 3 개 텍스처가 있다고 가정하자 또한 하늘, 잔디 및 흙 때문에지도를로드 할 때 변수/배열에 텍스처 이름을 쉽게 저장할 수 있습니다. 텍스처는 어떤가? 이미지로 무엇을해야합니까?

지도 작성기를 10 가지 게임에 사용한다고 가정 할 때 맵을 텍스처 이름이있는 map.txt 파일로 저장합니다. 지도 편집기를 다시 시작하고지도를로드하려고합니다. 주어진 데이터를로드 할 수 있지만 이미지는 어떻게됩니까?지도 편집기에서 타일을 게임으로 전달하는 방법

+0

나는 당신의 질문을 이해 힘든 시간을 보내고 있습니다. 내가 틀렸다고 정정하되, 사용자가 자신 만의 타일 (텍스처가 있습니까?)을 만들고 맵을 만들 때 사용할 수있는 맵 편집기를 만들었습니다 (32x32 타일 배열)? 이러한 사용자 정의 맵/텍스처를 저장 /로드하는 가장 좋은 방법은 확실하지 않습니까? –

+0

* 사용자가 컴퓨터에서 이미지를 선택하여 슬롯에로드 할 수 있으며 타일 너비 및 8x32 배열이있는지도 슬롯의 타일로 이미지를 사용할 수 있습니다. 타일을로드하는 데 확신이 없으며 map.txt가있는 맵 폴더에 각 텍스처를 저장해야하는지 잘 모르겠다. –

+0

나는 여전히 실제로 무엇을 요구하는지 확신 할 수 없다. 사용자가 선택한 타일 텍스처를 어떻게 저장해야하는지 확신 할 수 없습니까? 사용자가 5 개의 텍스처가있는지도를 만든다고 가정 해 봅시다. 게임을 저장하여 나중에 사용하는 방법을 모르십니까? –

답변

3

정보를 저장할 때 일반적으로 데이터를 많이 가능한 한. 이로써 향후 더 쉽게 유지 보수 할 수있게되고 전체적으로 더 깨끗한 설계가 가능해집니다.

귀하의 경우 나는 각 고유 한 타일을 배열에 저장하고 어떤 타일이 타일 배열로 인덱스를 통해 이동하는지 맵에 보관합니다. 이것은 the most common way tile maps are implemented in games입니다.

실제로 디스크의 데이터를 추적하는 방법은 전적으로 귀하에게 달려 있습니다. 비록 JSON을 매우 쉽게 파싱 할 수있는 많은 라이브러리가 있으므로 JSON을 권하고 싶습니다. 직렬화 가능한 객체를 사용하거나 자신 만의 파일 형식을 쓸 수도 있습니다. C#에서 JSON 파일 읽기/쓰기에 대한 자세한 내용은 this post을 참조하십시오.

과 같이 보일 것이다 JSON으로 디스크에 저장된 테스트 맵의 예 :

{ 
    "tiles": [ 
     { 
     "id": 1, 
     "hasCollision": false, 
     "texture": "DirtPath.png" 
     }, 
     { 
     "id": 2, 
     "hasCollision": true, 
     "texture": "DeadTreeStump.png" 
     } 
    ], 
    "maps": [ 
     { 
     "id": 1, 
     "name": "Test Map", 
     "tiles": [ 
      0, 0, 0, 0, 0, 
      0, 1, 1, 1, 0, 
      0, 1, 2, 1, 0, 
      0, 1, 1, 1, 0, 
      0, 0, 0, 0, 0 ] 
     } 
    ] 
} 
+0

하지만 그건 내 질문에 대답하지 않는, 나는 타일로 텍스처를로드하려고합니다. 이미지도를 저장할 수 있습니다. 저장된지도에서 텍스처의 이름을로드 할 수 있지만 그 데이터로는 아주 가깝지만 문제는 이미지입니다. –

+0

일반적으로 2D지도의 텍스처는 함께 그룹화되어 하나의 파일은 타일 맵이라고 불렀습니다. 이것은 필요한 IO 작업의 수를 줄임으로써로드 시간을 늘리기 위해 수행됩니다. 20 개의 타일 텍스처를 모두 개별적으로로드하는 대신 간단히로드 한 다음 메모리의 각 텍스처를 '잘라낼 수 있습니다. 사용자가 업로드 한 이미지와 함께 타일 맵을 만드는 대신지도 편집기에서 비슷한 방법을 사용하는 것이 좋습니다. 이 타일 맵 이미지는 다른 맵 파일과 함께 저장 될 수 있습니다. –

+0

당신은 타일 시트를 의미합니까? 저도 그렇게하고 싶었지만 텍스처를 더 작은 텍스처로 자르는 텍스처를 가질 수있는 슬롯을 만드는 것이 더 단순 해 보였습니다. –