PNGFlipBook

Kimbab1004·2024년 10월 1일
0

CPP

목록 보기
26/27

기존에는 하나의 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);
}

0개의 댓글