posted by REDFORCE 2017. 4. 20. 05:44

#1. Engine System

 + WinMain - EngineSystem

 + EngineCore

 + EngineError

 + MainNode


#2. FrameWork

 + Grahpics

 + Image - SpriteData  (현재 글)

 + Layer

 + Input

 + Game

 + Manager

 + Game Interface

 + Utility


#3. Testing Module

 + 2D Image Test

 + 2D Animation Test

 + Game UI Test


-----------------------------------------------------------------------


Image Class .cpp (1) 번 글에 이어서 (2)번 글 입니다.


이번 글은 주목할 내용이 Update 함수 뿐이라서 짧습니다.



1. Update


Update 라는 함수 이름으로 알 수 있듯이, 이 함수는 게임이 진행 되는


매 프레임마다 호출되는 함수입니다.


왜 Update 라는 함수가 필요한가? 에 대해서 의문이신 분은 Image class가 궁극적으로

무엇을 하기 위한 클래스 였는지 한번 상기해볼 필요가 있습니다.


이유인즉, Image Class는 spriteData와 같이 단순한 이미지 출력 용이 아닌,

애니메이션을 돌리기 위한 용도이기 때문입니다.


따라서 매 프레임 어떤 애니메이션 동작이 나올지 계속 갱신해줘야 하기 때문에 Update 함수를 갖고 있습니다.


다음 코드가 update 함수 전체 입니다.



update 내용을 보면,


8 Line : if (endFrame - startFrame > 0) 


만약 끝 프레임에서 시작프레임을 뺐는데 값이 0 보다 크다는 말은

프레임이 1개 이상이라는 뜻이니 애니메이션을 업데이트 해야 한다라고 인식합니다.


10 Line : animTimer += frameTime;


위 뜻은 animation을 돌릴 때 설정해둔 딜레이와 계산해서 

딜레이 보다 작다면 애니메이션을 업데이트 하지 않고 크다면 애니메이션을 업데이트 시킵니다.

즉, 딜레이가 길다는 뜻은 애니메이션 동작을 펼치는데 오래걸린다는 뜻 입니다.


예를 들어서 느릿느릿 움직이게 하고 싶은 애니메이션은 딜레이를 길게 주면됩니다.


13 Line : animTimer -= frameDelay;


조건문 결과 true 값으로 안으로 들어왔다면, 타이머에서 딜레이 값 만큼 빼줍니다.

안그러면은 타이머가 계속 올라가기만 해서 딜레이 보다 무조건 크다 라고 판단하고 조건문을 계속 들어오니까요.


14 Line : currentFrame++;


업데이트를 하게 되었으니, 현재 프레임을 상승시켜줍니다.


15 Line : if (currentFrame < startFrame || currentFrame > endFrame)


위 뜻은 현재 프레임이 시작프레임 보다 작거나 현재 프레임이 끝 프레임보다 크다면

아래의 내용을 수행해라 라는 뜻 입니다.


17 ~ 23 Line : if(loop == true){ } else { }


만약 반복 애니메이션 이라면~? 아래 내용을 수행 / 아니면 현재 프레임을 끝 프레임으로 설정하고 애니메이션이 끝났다 라고 알림 (animComplete = true;)


25 Line : setRect( ) 


다음 출력 해야 할 애니메이션의 spriteData.rect 를 셋업.



여기까지가 Image Class의 Update 내용이었습니다.


혹시나 보시고 응? 잘 이해안가시거나 오류가 있다면 알려주시면

바로 해결하도록 노력하겠습니다.