Gpg 1.13 ~ 1.14
Transcript of Gpg 1.13 ~ 1.14
GPG Study 1.13 | 1.14
Devrookie
권승진
1.13 실시간 통계와 게임 내 디버깅
1.14 실시간 게임 내 프로파일링
들어가기 전에…
실시간 통계와 게임 내 디버깅
목차
• 게임 내 디버깅이 무엇인가?
• 왜 사용하는가?
• 실제 사용 예
• 장, 단점
게임 내 디버깅이 무엇인가?
하하~! 몬스터가 플레이어
의 접근을 감지하는 기능
을 만들었어!!!
이제 한번 실행시켜볼까?
주인공
게임 내 디버깅이 무엇인가?
뭐야!!!왜 걸렸는데 날 쳐
다보지 않는거지??
게임 내 디버깅이 무엇인가?
아~! 타겟은 재대로 잡았는데,
위치를 잘못 얻어오네!?
게임 내 디버깅이 무엇인가?
아~! 타겟은 재대로 잡았는데,
위치를 잘못 얻어오네!?
게임 내 디버깅이 무엇인가?
이렇게 하는 방법입니다.
왜 사용하는가?
• 디버깅 시간 절약
– 알트탭 시간이 의외로 만만치 않다.• 알트탭 할 일이 없다.
– 간단한 수치 조정은 화면 안에서 바로 가능하다.
• 컴파일 시간 & 로딩 시간이 확연히 줄어든다.
– 바뀐 결과가 바로 눈에 보인다.
• 집중력 유지
실제 사용 예
• 미리 만들어진 stat.h,cpp 파일을 간단히 사
용해보고,
• 실시간 게임 내 디버깅 툴이 어떤 형식을 갖
추고 있는지 알아보자.
구조
CStatBase
CStatPage
CStatPage
CStatPage
.
.
.
CStatEntry
CStatEntry
.
.
CStatEntry
CStatEntry
.
.
<Static Class>
실제 사용 예
실제 사용 예
<프로그램 시작 시> 초기화 하고
<프로그램 업데이트 시>
키보드 상태 삽입해주고,
출력한다.
(내용을 담을 문자배열) : 여기에 출력될 모든 내용이 들어가게 된다.
실제 사용 예
사용하고 싶은 곳에서 등록만 하면 끝
실제 사용 예
실제 사용 예
실제 사용 예
아무것도 없는 곳에서
stat.h 추가하고 한 줄 추가하면
끝이다.
창에 띄우는건 됐는데…
이게 끝?
변경 안하고, 첨부된 파일 stat.h, stat.cpp
그대로 쓰실 생각이라면…..
F12 : 창 켜기/끄기
F11 : 값 에딧 기능 켜기/끄기
에딧 기능이 켜져 있을 때
+키 : 수치 증가
- 키 : 수치 감소
Shift키 : 누르고 있을 때 수치 * 10
Ctrl키 : 누르고 있을 때 수치 * 100
Up키 : 편집할 Entry 변경 위로
Down키 : 편집할 Entry 변경 아래로
PageUp : 페이지 앞으로
PageDown : 페이지 뒤로
변경 안하고, 첨부된 파일 stat.h, stat.cpp
그대로 쓰실 생각이라면…..
F12 : 창 켜기/끄기
F11 : 값 에딧 기능 켜기/끄기
에딧 기능이 켜져 있을 때
+키 : 수치 증가
- 키 : 수치 감소
Shift키 : 누르고 있을 때 수치 * 10
Ctrl키 : 누르고 있을 때 수치 * 100
Up키 : 편집할 Entry 변경 위로
Down키 : 편집할 Entry 변경 아래로
PageUp : 페이지 앞으로
PageDown : 페이지 뒤로이것 외에도 여러가지 기능을
개별로 추가해서 사용하시면 됩니다.
몇 가지 주의 할 점
• stat화면에서 변하는 변수 값을 적용하려면 포인터로 해야 한다는 당연한 이야기.
• Update시마다 갱신되는 변수 값은 바뀌어도 적용되지 않을 수 있다.
• 여러 개 찍어내야 하는 클래스(몬스터라거나)들의변수은 static으로 선언한 변수를 가지면 안된다.
장점
• 장점
– 어느 코드에서나 쉽게 변수 추가가 가능하다.
– 간략한 코드로 쉽게 디버깅 할 수 있다.
– 페이지 단위로 여러 정보를 볼 수 있다.
– 수치 변화를 실시간으로 볼 수 있다.• 범위 지정도 가능
단점
• 단점
– 필요한 변수형태를 직접 제작해야 한다.
실시간 게임 내 프로파일링
목차
• 프로파일링이란?
• 실제 사용 예
• 구현 원리
프로파일링이란?
코드의 병목 지점을 빠르게 찾을 수
있도록 하는 기법
프로파일링이란?
오! 맙소사 FPS가 왜이
렇게 떨어진거지??
프로파일링이란?어디가 문제인지 모르겠군!!
함수호출을 하나씩 끄면서
확인해봐야겠어!
물리 업데이트 함수 꺼보고
컴파일 & 실행
GUI업데이트 함수 꺼보고
컴파일 & 실행
.
.
.
.
1시간이 지나고..
3시간이 지나고...
.
프로파일링이란?어디가 문제인지 모르겠군!!
함수호출을 하나씩 끄면서
확인해봐야겠어!
물리 업데이트 함수 꺼보고
컴파일 & 실행
GUI업데이트 함수 꺼보고
컴파일 & 실행
.
.
.
.
1시간이 지나고..
3시간이 지나고...
.
프로파일링이란?
실시간으로 함수들의 호출
시간이 얼마인지 알아내는 기법
실시간으로도,
맨 끝에 로그로 남기기도
실제 사용 예
• 미리 만들어진 profile.h, profile.cpp파일을
보고,
• 프로파일링 도구라는 것은 어떤 기능을 갖
추고 있는지 알아보자.
실제 사용 예
Start와 End로 프로파일링 하고
싶은 범위만 지정하면 됩니다.
초기화 하고,
실제 사용 예
<결과를 계산하여 버퍼에 저장하는 코드>
사용자의 렌더링 환경에 맞게 변경 가능
실제 사용 예
• 결과물평균수행 비율 (전체에서 몇 %인가?)
최소수행 비율 (전체에서 몇 %인가?)
최대수행 비율 (전체에서 몇 %인가?)
한프레임당 호출 횟수
함수 이름몬스터는 2마리인가봐요.
실제 사용 예
• 결과물
들여쓰기 -> 내포 관계
MainLoop안에서 GUI Update코드를 호출
MainLoop안에서 Player Update코드를 호출
실제 사용 예
• 결과물
GUI 업데이트는
한 프레임에서 13.9%를 차지한다.
몬스터의 상황 업데이트는
한 프레임에서 1.4%를 차지한다.
실제 사용 예
• 결과물
한 프레임에서
GUI, Player, Creep업데이트
이외의 것들은 83.4%를 차지한다.
장점
• 함수의 부하 정도를 한눈에 알 수 있다.
– 논리적인 버그를 미리 잡을 수 있다.
– 병목 지점을 쉽게 찾을 수 있다.
간단한 구현 원리
• 코드 첨부
참고자료
• GPG 1권 내용과 예제코드