*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
class CBack
- 배경화면 등록은 매우 간단하게 가능하다.
- CGameObject를 상속 받는 클래스를 만들고,
거기에 텍스처를 등록하고,
사이즈를 창 크기만큼 설정해준 뒤(CGameManager에서 받아온다),
배경화면을 사용할 씬에서 가장먼저 CreateObject()를 해주면 끝이다.
아직까지는 생성 순서에 따라서 렌더링 순서가 뒤바뀌지만, 조만간 이것도 정렬을 통해 순서대로 렌더링할 것이다.
class CGameObject
- 이제 게임오브젝트의 움직임도 개별 메소드를 통해 중구난방으로 관리하지 말고, 체계적으로 관리해주자.
- CGameObject에 아예 몇 가지 메소드를 정의해서 해당 메소드를 통해 이동할 수 있도록 만들어 주자.
< float m_Speed >
- 각 게임오브젝트들이 가질 기본 이동속도 값
< void MoveDir() >
- 방향 벡터를 인자로 받아서, 해당 방향으로 이동속도 값 * 타임스케일 만큼 움직여 준다.
< void MovePos() >
- 벡터값을 인자로 받아서, 해당 위치로 순간 이동시킨다.
< void MoveAngle() >
- float 타입 각도를 인자로 받아서, 해당 각도로 이동속도 값 * 타임스케일 만큼 이동한다.
< void MoveValue() >
- 벡터값을 인자로 받아서, 해당 값'만큼' 이동시킨다.
- 추가로 Update() 과정도 세분화해 주자.
- Update()에서는 이동 처리
- PostUpdate()에서는 이동한 좌표값을 바탕으로 이외의 로직들 처리
- CGameObject를 상속받는 클래스들 중에서 이동 로직이 먼저 진행된 이후에 다른 로직을 처리해야 하는 경우 이렇게 처리를 해 주자.
- Update()가 되는 순서대로 따라가면서 전부 PostUpdate()를 추가해준다.
- CGameObject -> CScene -> CSceneManager -> CSceneGameManager
- CScene은 상속받는 클래스들이 기존 메소드를 재정의해서 쓸 수 있게 Init(), Update(), Render() 메소드를 가상 함수로 만들어 준다.
- 위 메소드들을 이용하여 CMonster과 CPlayer도 수정을 해 주자.
- 이제 바뀐 내용을 토대로 해서, 좀 더 편하게 플레이어가 이동할 때만 이동하는 애니메이션을 출력할 수 있다.
< Vector2 m_PrevPos >
< Vector2 m_Move >
- 위 세 변수를 선언하고, 매 Update() 메소드에서 갱신해놓으면, 이후 PostUpdate()에서는 위 변수들의 값을 체크해서 플레이어가 이번 프레임에서 움직였는지 안 움직였는지를 체크할 수 있게 된다.
- 좌/우 전환은 위의 m_Move.x가 0보다 큰지 작은지를 통해 구분 가능하다. -> m_PlayerDir에 저장해 놓는다
- 위의 여부를 판단해서 애니메이션이 자연스럽게 전환되도록 구현해 보자.
< int m_PlayerDir >
- 플레이어의 좌우 방향을 저장할 정수. 0 = 오른쪽, 1 = 왼쪽
- bool 변수를 index로 사용 가능하면 해볼 것 -> 사용 가능하다.
< vector<std::string> m_vecSequenceKey >
- 사이즈는 2개로 미리 선언 및 정의해놓는다.
- 0 -> 우측 애니메이션 이름 문자열을 저장
- 1 -> 좌측 애니메이션 이름 문자열을 저장
- 이렇게 준비해놓고, 플레이어가 좌측으로 이동하면 m_PlayerDir = 1, 우측으로 이동하면 m_PlayerDir = 0로 설정해준다.
- 그리고 애니메이션 전환을 ChangeAnimation(m_vecSequenceKey[m_PlayerDir])로 해주면 좀 더쉽게 구분이 가능해진다.
< 공격모션 세팅 >
- 이제 공격모션을 한번 세팅해보자.
(조건)
- 공격 모션은 loop를 돌면 안된다.
- 공격 모션 도중에는 Idle 상태로 돌아가지 않아야 한다. ( 공격 중인지 아닌지를 체크할 변수가 하나 필요하다)
- 공격 중 이동할 경우 공격 모션이 캔슬되고 기본 모션으로 돌아와야 한다.
- 공격 모션이 끝나면 EndFunction을 통해 다시 원래 Idle 상태로 돌아와야 한다.
- 공격 모션에서, 떄리는 모션에 맞게 공격 판정이나 총알이 나가야 한다.(Notify)
- 이 기준에 맞추어서 공격 모션을 세팅해 보자.
- 우선, 아이들/이동/공격 모션에 대한 애니메이션을 좌/우 구분하여 준비한다.
- Player의 초기화 때 해당 애니메이션들을 사용하도록 등록한다.
- 공격 모션의 경우 Notify 함수와 공격 종료 시 다시 원래 모션으로 돌아가는 EnfFunction도 추가로 등록해 주어야 한다.
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
41. 카메라 (0) | 2022.05.29 |
---|---|
40. Y Sort Rendering (0) | 2022.05.28 |
38-1. 애니메이션을 등록하는 다양한 방법들 (0) | 2022.05.28 |
38. 애니메이션 시퀀스 2(완료) (0) | 2022.05.26 |
37. 애니메이션 시퀀스 1 (0) | 2022.05.25 |