- 타일맵 파일입출력 간단 구현.
// CScene_Tool.cpp
...
void CScene_Tool::SaveTileMap(const wstring& strRelativePath)
{
wstring fullPath = CPathMgr::GetInstance()->GetContentPath();
fullPath += strRelativePath;
// FILE 은 C 표준 라이브러리의 파일 스트림 구조체.
FILE* pFile = nullptr;
_wfopen_s(&pFile, fullPath.c_str(), L"wb");
if (pFile == nullptr)
{
// 파일 열기 실패
return;
}
const vector<CObject*>& vecTile = GetObjByGroup(GROUP_TYPE::TILE);
// 타일 개수 저장
UINT tileCount = static_cast<UINT>(vecTile.size());
fwrite(&tileCount, sizeof(UINT), 1, pFile);
// 각 타일의 정보 저장
for (CObject* obj : vecTile)
{
CTile* pTile = dynamic_cast<CTile*>(obj);
if (pTile)
{
pTile->Save(pFile);
}
}
fclose(pFile);
}
현재 타일, 타일맵 등의 체계를 잡아놓지 않아서, 간단하게 파일입출력 형태만 구현함.
참고로 입출력 모드에 b 는 바이너리를 뜻하며 바이트 그대로 읽고 쓰는 것을 말함. 텍스트가 아닌 데이터를 변환할 때 EOF 로 변환되는 등의 오류를 예방하고자 하는 목적.
파일입출력의 쓰기 과정의 단계를 크게 보면 단순하다.
- write 할 파일을 연다.
- 파일 스트림에 데이터를 원하는 포맷으로 저장한다.
- 파일을 닫는다.
열기도 마찬가지.
// CScene.cpp
...
void CScene::LoadTileMap(const wstring& strRelativePath)
{
wstring fullPath = CPathMgr::GetInstance()->GetContentPath();
fullPath += strRelativePath;
// FILE 은 C 표준 라이브러리의 파일 스트림 구조체.
FILE* pFile = nullptr;
_wfopen_s(&pFile, fullPath.c_str(), L"rb");
if (pFile == nullptr)
{
// 파일 열기 실패
return;
}
UINT tileCount = 0;
fread(&tileCount, sizeof(UINT), 1, pFile);
ClearGroupObjects(GROUP_TYPE::TILE);
for (UINT i = 0; i < tileCount; ++i)
{
CTile* pTile = new CTile();
pTile->Load(pFile);
AddObject(pTile, GROUP_TYPE::TILE);
}
fclose(pFile);
}
중요한 것은 내가 저장할 오브젝트, 객체들에게 virtual 함수로 Save, Load 를 구현하고
해당 객체에 맞게 데이터 저장 포맷을 올바르게 정의하는 것일 듯.
지금 Tile 객체는 그냥 Vector2 위치만 저장하도록 구현함.
// CTile.cpp
...
void CTile::Save(FILE* pFile)
{
Vector2 pos = GetPos();
fwrite(&pos, sizeof(Vector2), 1, pFile);
}
void CTile::Load(FILE* pFile)
{
Vector2 pos = {};
fread(&pos, sizeof(Vector2), 1, pFile);
CTexture* pTileTexture = CResourceMgr::GetInstance()->LoadTexture(L"Tileset", L"texture\\Tile\\Tileset_Spring.bmp");
SetPos(pos);
SetTexture(pTileTexture);
}
아무래도 로드하는 과정에 생성자 또는 복사 생성자와의 연계를 신경써야 할 듯.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 57 - 58화. (0) | 2025.09.29 |
|---|---|
| Win32 api 강의 55 - 56화. (0) | 2025.09.29 |
| Win32 api 강의 53화. (0) | 2025.09.26 |
| Win32 api 강의 52화. (0) | 2025.09.26 |
| Win32 api 강의 51화. (0) | 2025.09.25 |