WIN32API FrameWork/한단계씩 직접 구현
38-1. 애니메이션을 등록하는 다양한 방법들
hyrule
2022. 5. 28. 19:03
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
* 가장 먼저, 애니메이션을 사용할 CGameObject에서는 애니메이션을 동적할당해주는 메소드를 호출해주어야 한다.
//애니메이션 파일을 동적 할당
CreateAnimation();
- 직접 이미지 파일 주소를 입력하여 애니메이션을 생성한다. 비효율적이므로 사용하지 않는 것이 좋다.
//1-1. Frame 등록 -> 배열을 직접 만들어서 등록하는 방법
//파일 이름을 넣어둘 배열
std::vector<std::wstring> FileName;
//파일 이름을 만들어낸다.
for (int i = 0; i < 11; ++i)
{
wchar_t Name[64];
swprintf_s(Name, L"Mouse/%d.bmp", i);
FileName.push_back(Name);
}
//이름을 정하고 파일 이름이 들어있는 배열을 전달한다.
m_OwnerScene->GetSceneResource()->CreateAnimationSequence("Cursor", "Cursor", FileName);
//프레임 형식의 애니메이션일 경우 AddAnimationFrameFrame 메소드를 통해 각 프레임 정보를 등록한다.
m_OwnerScene->GetSceneResource()->AddAnimationFrameFrame("Cursor");
//컬러키를 지정해준다.(이름만 넣으면 기본값인 true(사용) + 마젠타 색상으로 등록된다.
m_OwnerScene->GetSceneResource()->SetColorKey("Cursor");
//만든 애니메이션을 CGameObject의 m_Animation에 사용 등록한다.
AddAnimation("Cursor", "Cursor");
- 폴더 주소와, 해당 폴더 안의 프레임 갯수를 입력하면 자동으로 등록하는 방식이다.
- 이 방식은 파일명이 0부터 차례대로 정렬되어있지 않으면 에러가 발생한다.
//1-2. Frame 등록: LoadTextureByTextureNumbers 메소드를 통해 텍스처를 등록 후 애니메이션 사용
//해당 메소드는 이미지의 번호가 차례대로 0부터 시작해야 한다. 아니면 에러 남
m_OwnerScene->GetSceneResource()->LoadTextureByTextureNumbers("WalkRight", TEXT("WalkRight/"), 9);
//이름을 정하고 파일 이름이 들어있는 배열을 전달한다.
m_OwnerScene->GetSceneResource()->CreateAnimationSequence("WalkRight", "WalkRight");
//프레임 형식의 애니메이션일 경우 AddAnimationFrameFrame 메소드를 통해 각 프레임 정보를 등록한다.
m_OwnerScene->GetSceneResource()->AddAnimationFrameFrame("WalkRight");
//컬러키를 지정해준다.(이름만 넣으면 기본값인 true(사용) + 마젠타 색상으로 등록된다.
m_OwnerScene->GetSceneResource()->SetColorKey("WalkRight");
//만든 애니메이션을 CGameObject의 m_Animation에 사용 등록한다.
AddAnimation("WalkRight", "WalkRight");
- Sprite 등록 방식이다.
- for문 또는 수동으로 프레임 별로 스프라이트에서 표시될 위치를 지정해 주어야 한다.
//2. Sprite 등록
m_OwnerScene->GetSceneResource()->CreateAnimationSequence("PlayerRun", "PlayerRun", TEXT("Running.bmp"));
float x = 292 / 9;
float y = 41;
for (int i = 0; i < 9; ++i)
{
m_OwnerScene->GetSceneResource()->AddAnimationSpriteFrame("PlayerRun", x * i, 0.f, x, y);
}
m_OwnerScene->GetSceneResource()->SetColorKey("PlayerRun");
//애니메이션 설정
AddAnimation("PlayerRun", "PlayerRun");
//////////////////////////////////////////////////////////////////////////////////////