상세 컨텐츠

본문 제목

[포니 게임 개발] 22

프로그래밍/포니게임개발

by ∫2tdt=t²+c 2013. 5. 16. 04:08

본문




최근 몇주간은 바빠서 개발에는 거의 손도 못 댔네요. (어? 이 말 은근히 자주하는듯)

최근 작업내용은 한 눈에도 보이듯, UI입니다

다행히도 이전에 개발(이라 쓰고 '가지고 놀다'라고 읽습니다)하다만 엔진의 GUI 부분이 남아있어서 그대로 사용할 수 있었는데... 꽤 많은 부분 수정을 해야했습니다.


어느 GUI나 그렇듯이, 이 GUI도 윈도우들의 트리 구조를 가지고 있습니다. 최상위 윈도우는 지금 게임 화면을 렌더링하고 있는 고놈이구요, 그 자식으로 메뉴 프레임을 렌더링하는 윈도우가 들어가있고, 그 자식으로 각 메뉴 버튼들이 들어가 있습니다.


지금까지 구현한 컴포넌트들은 다음과 같아요

FWindow : 추상적이고 일반적인 윈도우 클래스, 모든 컴포넌트의 베이스 클래스입니다

FButton: 버튼을 구현하는 클래스

FHSelector: 좌우키를 이용하여 선택사항을 변경할 수 있는 UI컴포넌트 클래스

FDialog: 대화상자 프레임을 렌더하는 클래스


왜 접두어 F를 붙였는지는 저도 몰라요. 이전 엔진에서도 F를 썼길래 그대로 가져다 썼어요.


해상도를 높였을때 대화상자가 조그맣게 보이는걸 막기 위해, UI에 Scaling을 적용했습니다!

전체 세로폭을 기준으로, 768px보다 작으면 1배, 900px보다 작으면 1.25배, 1080px보다 작으면 1.5배, 그 이상이면 2배라는 공식을 적용했어요. 수치를 정한 기준은 딱히 없구요 그냥 제 맘 가는대로 정했어요ㅋ


윈도우에 자식윈도우 및 텍스트 배치를 편하게 하려고, CSS 박스모델의 padding 개념을 가져다가 썼어요. 그래서 윈도우 내의 내용물 위치는 윈도우의 시작위치에다가 padding까지 고려해서 결정됩니다. 


UI 작업할 때, 윈도우 애니메이션을 위해서 OnRender 부분에서 위치나 기타 프로퍼티를 수정하도록 하는 코드를 작성했었는데, 이 놈 때문에 엉뚱하게 사운드 출력부분이 폭발하는 문제가 발생했었어요.

이는 아마 락 걸린 상황에서 다른 스레드의 자원에 무분별하게 접근한것에 대한 죗값인가 봅니다. (로직 처리하는 스레드랑 렌더링하는 스레드는 별개로 돌고 있어요)

그래서 지금은 절대로 OnRender 내에서는 프로퍼티를 함부로변경하는 코드를 짜지 않고있습니다ㅋ


소소한 버그 수정으로는 (하지만 소소하지는 않은)

* 스크립트 실행시에 대화를 빠른 속도로 넘겨서(대화 로딩이 채 되지 않은 상태에서 넘기기 입력을 받게 될 경우) 먹통이 되는 상황을 수정했습니다.

-> 이건 로딩이 완료됐을때 yield를 끝내고 복귀하는 코드가, 넘기기 입력을 받아서 yield를 끝내고 복귀하는 코드보다 뒤에 있어서 발생하는 문제였습니다.




영상을 보면, 깨알같은 수정사항들도 살펴볼수 있어요. 경사면 테스트를 위해 맵을 마개조했구요, 경사면 타는 모습이 정상적으로 나온다는 걸 알수있어요.


몇가지 문제점이 있는데

1. 경사면을 탈 때의 캐릭터 각도가 때때로 잘못 나타납니다 : 이건 제 물리엔진의 한계상 특정시간마다 부동소수점 오차범위 내에서 캐릭터가 공중에 뜨는 현상이 발생하기 때문이에요... 깔끔한 해결책을 찾지 못하고 있는 중이어서 방치.

2. 최초로 메뉴 창을 띄울 때 버벅거림이 심하게 나타납니다 : 확대 애니메이션 때문인데, 그 크기에 맞는 폰트가 미리 캐시에 저장되어있지 않기에 일일히 렌더하며 글리프를 준비하느라 시간이 걸리기 때문입니다.

이게 문제가 되는게, 실제로 UI에서 사용하는 폰트의 크기가 24픽셀 짜리라고 해도, 창을 띄울때 확대 애니메이션이 적용되면서 12픽셀, 13픽셀, 14픽셀~~~ 23픽셀 크기까지의 글리프를 렌더링하려고 시도하기에, 이 모든 글리프를 렌더링하고 캐시에 저장하게 됩니다. 시간 낭비에 메모리 낭비인데, 이 역시 깔끔한 해결책을 찾지 못해서 방치해뒀습니다.


UI작업이 끝나면, 게임 내 화면 전환과 게임 전환 부분을 작업할 예정입니다.

'프로그래밍 > 포니게임개발' 카테고리의 다른 글

[포니 게임 개발] 24  (0) 2013.05.22
[포니 게임 개발] 좋은 폰트를 주웠다  (1) 2013.05.20
[포니 게임 개발] 23  (2) 2013.05.18
[포니 게임 개발] 21  (0) 2013.04.28
[포니 게임 개발] 20  (0) 2013.04.23
[포니 게임 개발] 19  (2) 2013.04.19

관련글 더보기

댓글 영역