기존에는 하나의 Atals에서 여러개의 Sprite를 만들어 Flipbook을 만들었지만 현재 리소스는 여러개의 png로 구성돼있다.
이는 여러개의 Atals가 존재하고 이것 하나하나가 sprite이기 때문에 약간의 변형을 주었다. Atals는 key가 하나씩 존재하는데 이 key를 다른 atlas끼리 동일하게 해서 문제가 발생했었다.
void CPlayer::CreatePngFlipbook(const wstring& _FlipbookName, const wstring& _Pngname, Vec2 _LeftTop, Vec2 _RightBot, int MaxFrame)
{
// Sprite 생성하기
for (int i = 0; i < MaxFrame; i++)
{
wchar_t filePath[100] = {};
wchar_t textureName[100] = {};
// 각 프레임에 대한 경로 생성
swprintf_s(filePath, 100, L"Texture\\azazel\\%s_%d.bmp", _Pngname.c_str(), i);
swprintf_s(textureName, 100, L"azazel%d", i);
CTexture* pAtlas = CAssetMgr::GetInst()->LoadTexture(textureName, filePath);
CSprite* pSprite = new CSprite;
// _RightBot를 그대로 넘기지 않고 크기로 사용해야 합니다.
Vec2 spriteSize = _RightBot - _LeftTop;
pSprite->Create(pAtlas, _LeftTop, spriteSize);
// Key를 만들 때, wstring을 미리 생성 후 사용
wchar_t Key[50] = {};
swprintf_s(Key, 50, L"%s_%d", _FlipbookName.c_str(), i); // 여기서 형식 문자열을 분리하여 사용
CAssetMgr::GetInst()->AddSprite(Key, pSprite);
wstring strSavePath = L"Sprite\\";
strSavePath += pSprite->GetKey();
pSprite->Save(strSavePath);
}
for (int i = 0; i < MaxFrame; ++i)
{
wchar_t Key[50] = {};
swprintf_s(Key, 50, (_FlipbookName + L"_%d").c_str(), i);
wstring Path = L"Sprite\\";
Path += Key;
CAssetMgr::GetInst()->LoadSprite(Key, Path + L".sprite");
}
// Flipbook 생성하기
CFlipbook* pFlipbook = new CFlipbook;
for (int i = 0; i < MaxFrame; ++i)
{
wchar_t Key[50] = {};
swprintf_s(Key, 50, (_FlipbookName + L"_%d").c_str(), i);
pFlipbook->AddSprite(CAssetMgr::GetInst()->FindSprite(Key));
}
CAssetMgr::GetInst()->AddFlipbook(_FlipbookName, pFlipbook);
wstring Path = L"Flipbook\\";
pFlipbook->Save(Path + _FlipbookName);
}