midas+son의 크리에이티브(creative) 이야기


유저 인터페이스 기본 룰 코딩

◇ 창이 겹치어도 명령은 맨 위의 창 우선 적용

 - ui창은 벡터에 push_back되어 동작

   update는 역순으로 명령 처리(reverse_iterator)

   render는 정순으로 맨 마지막 객체가 상위에 올라옴

 창 클릭에 따라 상하 관계(z-오더) 적용

- 명령이 떨어진 UI창은 벡터 중간에서 빼내어

  다시 push_back() //포인터로 된 벡터이므로 리소스 최소

 UI창 내 클릭 시 맵이동 및 외적인 요소 무시

 - 마우스 매니져 입력 시

   UI창 내 명령이 떨어지면 

   명령 마지막에 마우스 매니져 옵션 캔슬

 창 이동

 창을 닫거나 게임 종료 시 창 위치 저장

 - release()할 때마다 ini저장, init()할 때는 ini로드



[영상 - UI기본]


◇ 플레이어 어택 모션 추가

 플레이어 길찾기 수정

  - 몬스터 접근 시 한칸 전에서 멈춤

  - 걸어다닐 타일 표시

 넘버 매니져 추가

  - 데미지를 0~9까지의 이미지로 조합

  - 조합된 이미지를 화면에 처리

  - 이동하면서 서서히 투명값조정

  - 타겟팅된 몬스터 표시(위에 역삼각이미지)

 몬스터 산타포링 생성

  - Singleton으로 매니져 처리

  - Vector와 Map으로 동적 생성 객체 그룹화

  - 몬스터 죽음

  - 애니메이션 추가

 마우스 매니져 공격 커서 추가



[영상]



- 몬스터 매니저 제작

- 기본 샘플 몬스터 "산타포링"이미지 작업

- 플레이어&몬스터 액션 정리

- 플레이어 생성 시 이름 랜덤 지정

- 맵 이동 시 경로 미리보기


주말이 지나니 지난주 코딩에 이것저것 수정 사항이 보여서

손좀 보는터라 몬스터 진행이 많이 안됐습니다.


* 내일 할일 - 영상으로 찍을 만한 몬스터 보여주기

일요일인 오늘은

프로그래밍 보다 책 이야기를 하겠습니다.


살면서 최초로

게임에 돈을 투자 해본거나

정액을 해본 게임이

라그나로크였습니다.

(그런 애뜻함으로 모작을 시작한건 아닙니다.)


중3이나 고1때부터 알았던 게임이고

2D인듯 3D인듯 

아기자기 했기에 

관련 책도 자주 샀었던거 같아요.



예전엔 책을 더 많이 가지고 있었는데

지금 책장을 뒤져 보니 

5권 남아있네요.

위 왼쪽부터 2005년~2006년~아래 왼쪽 것까지

고3 수능 끝나고도 다시 라그에 관심을 가졌었나 봅니다.

아래 맨오른쪽 라그담화는 

2007년 군대가기 전에 나와서 산거네요.


10년이 지난 헌책들입니다(웃음)






오피셜 가이드 북이나 

바이블 책을 보면 이런 정보들이 수두룩했죠.


저 위의 경험치 테이블을 

소스에 반영해봐야 겠네요.ㅎㅎ

몬스터들 레벨이나 체력도 반영하면 되겠어요.



Njoy책을 보면 퀘스트가 소설처럼 정리 되었던거 같아

깨지 않아도 보는 즐거움이 있었죠.


라그 담화는 픽션안의 픽션(?) 같은 소설내용인데

재미있었습니다.

 


제일 재밌었던건 4컷 만화였네요.

그 어릴때 뽑을 피가 어딨다고

친했던 한 친구가 헌혈로 받은 

문화 상품권으로 사준 책이었습니다.

재밌어서 몇년 후 군대 가서도 휴가 복귀때 가지고가서 봤었네요.

지금 봐도 웃깁니다.ㅋㅋㅋ


웃는 이야기는 혼자 웃고

내일부터 진행할 몬스터 제작에는

바이블 책이랑 오피셜 가이드북의 내용좀 참조하면 

도움이 될것 같네요.


그럼 오늘은 여기까지만~

2주간 열심히 달려왔는데
두번째 맞게된 
이번 주말은 
소중한 사람들과 함께 시간을 
보내도록 하겠습니다.

좋은 주말 되시고 
한파 조심하시고 
감기 조심하세요.


맵툴로 맵을 만들고
길찾기 알고리즘을 적용하고
인게임에 모션 적용까지 마쳐서
이번주 마무리가 되는 듯 하네요.

- playerManager singleTon 구성
- 인게임에 8방향 걷기 모션 구현
- 길찾기 알고리즘 적용
- 찾아가는 길에 따라 방향 전환

[영상 - 인게임 길찾기 적용]


* 내일 할일 - 휴식

* 담주 할일 - 몬스터 제작

맵툴에 이미지 추가하고
길찾기 알고리즘을 적용해보았습니다.

- 타일 추가 후 가상 스크롤 적용
- 타일 적용한 공간에 이동가능 속성적용
- 길찾기 알고리즘 적용
  1. 이동 가능 지역 체크(연하늘색)
  2. 시작점(빨간색), 목표(노란색)
  3. 이동경로 체크(파란색)
- 디버그를 위한 라인작업




[영상 - 길찾기 테스트]


길찾기 알고리즘 자체는 어렵지 않았는데

디버그를 위해서 라인을 그리고

색 추가한것이 문제를 일으켜서

4시간 넘게 계속 처다 봤습니다.


결국 해결했는데 문제가 뭐였냐면

HPEN변수로 Create 해주고나서

DeleteObject 를 실수로 안해줬더니

3번 연달아 길찾기 시도할때마다

색이 하나씩 안나오고 사라지는 것이었습니다.

이런 사소한 것으로 시간을 많이 잡아먹었지만 

역시 깨달음의 하루였습니다.

만들면 처리하자....입니다.


* 내일 할일 - 인게임에서 캐릭터가 길찾기 따라 이동

길찾기 알고리즘을 적용해 보려고 하였으나
순서상 타일의 정보를 가지고 있는 맵이 있어야 하므로
맵툴을 먼저 만드는게 순서라 생각해서
제작에 들어갔습니다.

- 샘플 타일 이미지(bmp) 생성
- 총 맵사이즈는 윈도우 창(1024px)보다 크게
 + 카메라 적용 하여 이동
- 카메라 안(윈도우 사이즈)만 그려주므로
 프레임 저하 최저
- 하나의 타일 32 * 32 픽셀
- 이미지 하나는 256 * 256 이므로
  가상으로 가로세로 각각 8등분 
- 이미지 클릭 후 맵 클릭시
  64개의 타일정보를 입력
- 맵 정보를 저장
- 인게임에서 로드

기본적인 맵툴의 Base는 짰으니
내일 부족한 부분 채워 넣으면서
구체적으로 디테일하게 만들겠습니다.

그게 끝나야지 맵타일마다의 정보로
길찾기알고리즘 적용이 되겠네요.

오늘은 여기까지~



[영상 - 맵툴 기본]


* 내일 할일 - 맵툴 디테일

맵에 대한 타일과 
길찾기 알고리즘으로
A*(에이스타) 알고리즘에 대해 공부를 했는데
가야될 경로와 
캐릭터를 아직 연결하는 과정에서 
원하는데로 움직이지 않아서 
제대로된 움직임이 나오지 않았습니다.
내일 다시 시도 해보겠습니다.

오늘 마무리된 작업은
기본적으로 캐릭은 맵의 중간에 위치하지만
움직여도 맵이 움직이는 것처럼 보이게 하고
캐릭이 화면 밖으로 나가지 않게 처리하였습니다.
맵 상하좌우 끝자락에 오면 
맵은 움직이지 않고 
캐릭 좌표가 움직이게 처리했습니다.

어떤 방식인지 자세히 얘기 하자면
맵 전체 이미지에 대해 캐릭의 좌표를 지정합니다.
맵에 대한 render(그리는 함수)는 
맵 전체를 그려버리면 리소스가 커지므로
맵 그리기 시작 좌표를
{캐릭 x좌표 - WINSIZEX / 2, 캐릭 y좌표 - WINSIZEY /2}
부터 시작하여
width = WINSIZEX 
height = WINSIZEY
만큼만 그려줍니다.

그러면 일단 캐릭을 움직여도 
맵은 캐릭 좌표 기준으로 상하좌우 반씩만 보이므로
중앙에 있는 것처럼 
이동하게 됩니다.
 
캐릭 x좌표 - WINSIZEX / 2 가 0보다 작아지면 
0으로 치환

캐릭 y좌표 - WINSIZEY / 2 가 0보다 작아지면 
0으로 치환

캐릭 x좌표 + WINSIZEX / 2 가 맵 가로사이즈 보다 커지면
맵가로사이즈 -  WINSIZEX 로 치환

캐릭 y좌표 + WINSIZEY / 2 가 맵 세로사이즈  보다 커지면
맵세로사이즈 -  WINSIZEY 로 치환

하여 맵 그리기 좌표 시작 하면 
맵이에서 윈도우 창에서 벗어 나지 않게
컨트롤 할수 있게 됩니다.

이를 카메라 라고 칭합니다.

영상은 내일자로 같이 보여드리는 걸로 하고 
오늘은 영상 없습니다.

* 내일 할 일 - A* 알고리즘(길찾기 알고리즘)대로 캐릭터 움직이기

이제 인게임(inGame)을 처리 해야 되는데

우선적으로 맵을 만들어야 되고

그 맵에서 플레이어 캐릭이 

이동 할 수 있게 적용해야 됩니다.


근데 맵에서 캐릭터 이동하는 방식을 크게보면

1. 픽셀 충돌을 이용한 이동

- 픽셀 충돌을 이용한 대부분 직선 이동(특정 색상에서만 방향 전환)

[그림1]

2. 맵 타일 속성에 따라 이동

- 길찾기 알고리즘을 적용하여 타일단위 이동

[그림2]


대략 위 2가지 방법 중 하나를 사용해야 하는데

전 2가지 다 적용할 생각입니다.


원작 게임을 보면 

플레이어 이동 방식은

그림 2와 같은 타일단위 이동이고

몬스터들이 이동하는건

그림 1과 같은 픽셀충돌 이동입니다.


그러하므로 일단 플레이어 처리를 해야하니

그림 2와 같은 방법을 적용하고

이후에 몬스터 클래스를 만들어 적용 할때 

픽셀 충돌 이동을 적용하도록 하겠습니다.


오늘은 이론적인 것을 생각해 보면서 공부를 했습니다.

이번주는 맵과 길찾기 알고리즘에 대해 작업하겠습니다.


* 내일 할일 - 맵 관련, 길찾기 알고리즘 적용 시작