뭐랄까 그냥 도큐먼트 그대로 번역한것임......
뭔가 대단한건 없...... 나?? 없을걸??
이 문서에서는 간단한 2D 슈팅게임을 만들어보면서 어플리케이션의 기본 작동이나 PSM SDK의 개발순서등을 익힐 수 있습니다.
이 문서는 아래와 같은 사람을 대상으로 쓰여졌습니다.
게임 어플리케이션을 처음으로 개발하는사람 / C#의 기본적인 작업을 이해할 수 있는 사람
1. 최소한의 PSM 프로그램
처음으로 최소한의 PSM 프로그램을 실행시켜봅시다
(원래는 여기서 샘플 프로젝트를 열게끔 되어있는데 일단 저는 뉴 솔류선을 생성하는걸 적음)
PSM스튜디오를 켜고 파일 -> 뉴 -> 뉴 솔루션 을 누르면 다음과 같은 창이 뜹니다
기본적인 프로젝트 생성과 똑같음

그럼 여기서 원하는 디렉터리를 설정해주고 솔루션 이름을 적고 OK를 누르면

이런식의 기본 생성물이 생성됨
sln 파일은 솔루션 파일이고 그 아래에 csproj 프로젝트 파일 그리고 그 아래에 cs의 C#파일의 구조로 되어있음요
그림으로 보면 아래와 같음

저런식으로 기본 틀이 잡히게 됩니다.
그리고 이제 Ctrl+F5나 메뉴에서 Run을 찾아서 고 하면

이런식으로 쫙!!!
끝!!!
참고로 PS VITA나 실행 가능한 안드로이드 단말기에서 실행하려면 기기를 개발자 등록을 시킨후에 디버그 프로그램을 깔아야하는데
그건 뭐 나중에 설명하지요.... 일단 끝!!!!
2. PSM프로그램의 기본 구조
소스코드를 살펴봅시다.

일단 main() : 프로그램은 제일먼저 main()에서 시작됨. 어떤 응용 프로그램이든 반드시 하나의 main()이 필요함. 단, 두 개 이상일 경우 오류가 발생합니다.
Initialize() : 주로 초기화 작업을 실행. 이 프로그램에서는 시작할 때에 한 번만 이 작업을 수행
다음은 while루프에 들어가서
SystemEvents.CheckEvents(), Update(), Render()를 반복함.
SystemEvents.CheckEvents() : OS에 맞는 이벤트를 확인함. 예를들면 Android 장치에서 응용 프로그램이 최소화 된 이벤트 등을 여기서 감지. Windows에서는 창 메시지 처리등을 여기서 감지
Update() : 주로 CPU에 계산하는것을 Update()에 작성
Render() : 주로 렌더링처리나 GPU에 맡기는 처리등을 Render()에 작성. Render() 안의 graphics.Clear() 에서 프레임버퍼를 지움
SwapBuffers() : 수직 동기 타이밍에서 프레임버퍼를 전환
프로그램이 어떻게 동작하는지 좀 더 알기위해 다음과 같이 소스를 수정합니다.

(추가한 부분이랑 삭제한 부분 주석으로 표시함)
이 프로그램을 실행하면 색이 점점 하애지다가 완전히 흰 색이 되면 다시 검정색으로 돌아감
(스샷은 못 찍겠음;;;;;;;;; 흰색이나 회색이나 검정색이 나옴)
graphics.SetClearColor (int r, int g, int b, int a) 는 인수를 넣어 그 인수에 맞는 색으로 화면을 지우는 작업을 실행하고
r=255, g=255, b=255는 흰색이 나옴 (a는 알파값 0에서 투명 255에서 불투명)
그리고 Update()를 반복할수록 colorValue가 계속 증가하는 것을 볼 수 있음 (예외처리로 값이 오버되면 0으로 되돌아감)
이 수치는 시뮬레이터에서는 초당 60회 업데이트 됨.
3. 처리의 흐름
처리의 흐름을 그림으로 표시하면 다음과 같음

디스플레이에 표시되는 비디오 메모리의 영역을 프레임버퍼라 함
게임 응용 프로그램은 일반적으로 화면에 표시되는 이미지 영역을 2개 가지고 있으며, 이를 더블 버퍼 방식이라 함
그림은 다음과 같이 넘어감
1. 먼저 뒤 영역(back)을 r=1, g=1, b=1로 클리어함 (위의 그림은 알기 쉽도록 흰색을 강조하고 있다고 함)
2. 그리기가 완료되면 16밀리초 지날 때까지 기다림
3. 16밀리초가 경과하면 r=1, g=1, b=1로 클리어 한 영역을 앞 영역으로 함
4. 이번에는 뒤의 영역에 r=2, g=2, b=2로 클리어함
5. 그리기가 완료되면 16밀리초 지날 때까지 기다림
6. 16밀리초가 경과하면 r=2, g=2, b=2로 클리어 한 영역을 앞 영역으로 함
을 반복함.
영역을 전환하여 표시하는 것은, 그리는 도중에 화면을 표시 해 버리면 화면이 깨지기 때문에 이를 방지하기 위한 것
디스플레이의 갱신의 타이밍에 맞추는 것을 "화면의 수직 동기화 대기(맞춤)" 이라고 함
(이 부분은 그냥 직역했는데......... 뭐랄까 국내에서 쓰는 용어가 생각이 안 나서;;;)
디스플레이의 업데이트 시점이 약 16.6밀리초 이므로, 프레임 버퍼의 전환도 이제 맞춰 숫자로 되어있음
(단 안드로이드 장치 중 일부는 60fps가 안 나오는것도 있음)
SwapBuffers()에서 화면 전환을 기다릴 때까지의 시간을 1 프레임이라고 함
초당 프레임 업데이트 횟수를 나타내는 단위로 fps(Frame Per Second : 프레임 / 초)를 사용함. 1초에 60번 프레임을 업데이트 할 때에 60fps로 표기함.
4. 용어의 정리
"디스플레이"는 하드웨어적인 표시 장치를 말하는 것임
"스크린"은 소프트웨어적인 화면을 말하는 것임
"프레임 버퍼"는 비디오 메모리에 확보 된 영역을 말함
이 용어는 뒤에서도 나오니 잘 기억해 두자
------------------------------------------------------------------------------------------- 여기까지가 도큐멘트 번역내용입니다.
참고로 도큐멘트는 일본어판으로 보고 적고있고, 제 멋대로의 의역입니다.