NAT(Null Animation Technique) 을 이용한 캐릭터 애니메이션 #4

버전4에서는 Graphic:MoveTo() 를 이용하여 캐릭터를 직접 이동시키지 않고,
Box2D 물리 엔진을 이용해서 캐릭터 이동 및 충돌을 처리하도록 했습니다.

저작자 표시
신고



NAT(Null Animation Technique) 을 이용한 캐릭터 애니메이션 #3

버전3에서는, 캐릭터 입력 부분을 별도로 클래스(CharControl)로 관리하도록 구조를 수정한 것입니다.

저작자 표시
신고


NAT(Null Animation Technique) 을 이용한 캐릭터 애니메이션 #2

이번 버전2는 이전의 버전1과는 다르게 Null Image(1x1 크기의 투명 이미지)를 이용하고 있습니다.
그리하여 Null Animation 처리 이외에 일반 Rotate, Scale, Move 를 동시에 처리가능하게 할 수 있습니다.


이것을 응용하면 Null Image 개수를 늘려서, 좀더 다양한 이벤트도 처리가 가능합니다.
예를 들면 캐릭터 주변에 발생되는 이펙트 효과라든가 말이지요.

저작자 표시
신고


NAT(Null Animation Technique) 을 이용한 캐릭터 애니메이션 #1


게임오븐은 콜백 기반으로 인터페이스가 구성되어 있습니다.

그리고, 게임오븐에서 일정 시간이 경과한 이후에 변화를 처리하기 위해서는
다음과 같이 몇가지 방법이 있습니다.


1. Client:OnTimer() 에서 타이머 이벤트 발생 주기마다 변화

2. Scene:Update() 에서 매 프레임 랜더링할 때마다 시간적 변화를 체크

3. AnimationFinished 이벤트 핸들러를 이용한 콜백 이벤트 처리


위의 각 방법에는 나름대로 장단점이 있습니다.

1번의 경우에는 보통적인 방법으로 시간 변화를 감지할 수 있으나,
timerid 관리가 어렵습니다.

아울러, 캐릭터 애니메이션과 연관지어서 구성하려면 timerid 나 시간을
정교하게 관리해야 하는 번거로움이 있습니다.


2번의 경우에는 매 호출시기 마다 경과 시간을 체크해서
현재의 상황을 갱신해야 합니다.

아울러 매 프레임마다 호출되므로,
복잡한 코드가 Update() 내부에서 동작하게 될 경우 전체 프레임이 떨어집니다.

이것은 게임 성능상 치명적이고 보기 좋지 않습니다.


3번의 경우는 AnimationFinished 콜백 이벤트 함수를 응용해서
특정 시간동안 애니메이션을 처리한 이후에 호출되는 콜백 함수를 이용하는 것입니다.

특정 시간동안 아무것도 처리하지 않는 Null Animation 을 끼워넣어서
주기적으로 콜백 함수가 호출되도록 하는 것입니다.

각 이미지 단위로 콜백 함수를 호출되도록 관리할 수 있으므로, 매우 유용하게
쓰일 수 있습니다.

애니메이션 종류에는 몇가지 있지만, 그중에서 KeyShow 애니메이션이
아무것도 처리하지 않는 Null Animation 에 적합합니다.

그러나, 복합적으로 이미지에 애니메이션을 처리하고자 할 때는
Null Animation 의 완료된 시점과 일반 Rotate, Scale, Move 등의 애니메이션의
완료된 시점이 혼동될 수 있습니다.


이 예제는 3번의 AnimationFinished 이벤트 핸들러를 이용해서
구현한 캐릭터 애니메이션을 보여주고 있습니다.

저는 이 방법을 NAT(Null Animation Technique)라고 이름을 지어봤습니다.
네트워크 용어와 혼동될 수도 있지만, 그래도 짧게 읽고 싶습니다. (^^)

추후에 일반 Rotate, Scale, Move 와 Null Animation 을 병행해서 처리 가능하도록
개선의 여지는 남아 있습니다. (이 부분은 다음 버전에서 해결됩니다.)


저작자 표시
신고

티스토리 툴바