Search
Duplicate

LV16 FSM, 이미지 회전, 투명한 이미지를 이용한 이펙트

숙제

내 캐릭터를 FSM을 이용해서 움직이게 만들어보고 조작가능하게 구현해보세요.

FSM 이란?

FSM 이란 특정한 상태를 정의하기위한 개념적 모델이다. 여러개의 제한된 상태(State)가 존재하고
그 존재들이 특정 조건에 물려 서로 연결되어있는 형태를 의미한다.
아래의 그림은 게임에서 Bot(NPC나 Monster등에 적용되는 간단한 AI 상태이다.
위의 그림같이 특정한 조건에 따라 그 조건으로 상태가 전환이 되면서 해당되는 상태를 처리하는 것을 FSM 이라고 한다.

FSM을 왜 사용하는가?

FSM을 사용하는 이유는 간단하다. 쉬운 개념의 적립, 각상태와 형태가 코드상이 아닌 도표로써 나타내짐
으로써 AI의 개념을 프로그래머 이외에 기획자 또는 제 3자가 쉽게 확인,설계가 가능하기 때문이다. 그리고
정해진 룰이 있기때문에 프로그래머입장에서 코딩시 조금더 안전성이 높은 코드를 만들어낼수 있다.그리고
각각의 상태는 나뉘어져있기때문에 새로운 상태의 추가 삭제가 용의하다.
※ FSM이 모든 AI를 대변하는것이 아니다. Fuzzy, 하드코딩 AI 등 게임에서는 여러가지 형태가 병합되어있다.
위의 그림을 참고삼아 예를 들어보도록 하겠다. 아래의 몬스터 예상 공격패턴이 있다.
현재 한마리의 Monster가 존재한다. Monster의 공격대상은 당연히 Player 이다.  몬스터는 공격대상이 없을때
는 주외를 방황하면 걸어다니거(Move)나 제자리에서 혼자 무언가를 하고있다.(IDLE). 공격대상이 생겼을 경우
몬스터는 해당 대상을 공격(ATTACK) 한다.
위의 패턴을 잘 보면 위의 그림으로 나타낸 도표로 다 표현할수 있다.  그리고 FSM으로 구현되어져있기때문에
각각의 상태는 여러가지 형태로 변경되어질수 있다. 예를 들자면 ATTACK상태를 여러가지로 나뉘어 놓을수 있다.

Gdiplus 에서 특벙 픽셀을 투명화시키는 방법

imageAttribute를 설정해주고 해당 속성을 draw image의 마지막 인자로 넣어주면된다.
이미지를 회전시켜줄떄는 RotateTransform 함수로 회전을 시켜주면된다.