Game Programming/XNA
XNA :: XNA Game Studio 4.0 # 2 - 윈도우를 이루는 시스템VallistA2015. 4. 17. 18:13
전 글에서 우리는 XNA를 설치를 해보았고, 다음으로 나갈 충분한 준비가 되었다.
먼저 Visual Studio를 켜서, 새 프로젝트를 열어보자. 그러면 Visual C# 카테고리에 Windows Game 등 여러가지 플랫폼이 추가됨이 보일 것이다.
<사진 1 : 새로 생성된 목록들>
우리가 만들어야할 프로젝트는 Windows Game (4.0) 이며, 적절한 이름과 위치를 정해두고 생성하도록 하자.
생성을 하면 맨 처음에 Game1.cs 가 보일것이고 익숙하지 않은 솔루션이 보일 것인데, 먼저 솔루션을 보도록 하자.
<사진 2: 솔루션 탐색기>
솔루션 탐색기를 보면 2개로 나뉘어져 있음을 맨처음에 확인 할 수 있는데, 먼저 게임 프로젝트와 컨텐츠 프로젝트가 나뉘어져 있다.
- 게임 프로젝트
게임 프로젝트는 실질적으로 게임을 만드는데 필요한 스크립트 및 라이브러리들이 들어가는 공간이며 이 곳에서 전반적인 작업을 다 한다 생각하면 편하다.
- 컨텐츠 프로젝트
컨텐츠 프로젝트는 게임을 만드는데 필요한 리소스들이 들어가는 공간이다. 이 곳에는 리소스들을 넣어주어야 하며, 리소스를 윈도우에서 폴더 디렉터리 들어가서 추가를 해 줬어도 여기에 등록을 시켜줘야한다. 컨텐츠 내부에는 폴더를 몇개든 생성을 하여도 되며, 그 안에 넣어줄 경우에는 경로를 써주어야 한다.
확인을 하고, 소스코드가 켜져있는 것을 보면 맨 처음 Game1.cs가 켜져있는 것을 볼 수 있을 것이다.
<사진 3: 제일 처음 보이는 Game1.cs 스크립트>
필자는 프로젝트 이름을 WindowsGame1으로 했기 때문에 namespace가 다르게 되어 있을 것이다.
이는 신경쓰지 않아도 된다.
이제 그 안에 제일 중요한 Game1 클래스가 들어 있다. 천천히 설명을 들어가도록 하겠다.
- Microsoft.Xna.Framework.Game 을 상속받는 Game1 클래스
Microsoft.Xna.Framework.Game을 특정 클래스가 상속받을 경우, 그 상속받은 클래스는 "main" 이 된다.
이 main 이 된 클래스에서 모든 작업을 처리를 하면 된다. 작업을 처리 할 수 있냐고 물을텐데, 대답은 O 다. 모든 작업이 가능하도록 쉬운 구조로 만들어져 있다.
- GraphicsDeviceManager graphics;
GraphicsDeviceManager는 Game을 상속받은 "main" 클래스에서 렌더링 (즉 뿌려주는 작업)을 도와주는 클래스다.
이 매니저를 사용하여 우리는 나중에 그림과 폰트등을 뿌릴 것이다. 믿기지 않겠지만 저 하나의 클래스가 렌더링하는 총괄하는 매니저이다.
- SpriteBatch spriteBatch;
SpriteBatch는 하나의 렌더링 화면이라고 보면 된다. GraphicsDeviceManager가 붓이라면 SpriteBatch는 도화지라고 생각하면 된다.
Microsoft.Xna.Framework.Game 을 상속받는 클래스는 아래에서 언급할 함수들을 필수적으로 사용해주어야 한다.
아래의 함수들은 override를 하게 되는데 override는 C#에서 부모클래스의 가상 함수를 가져와서 사용하는 참조자이다.
- protected override void Initialize()
이 함수는 초기화를 하는 함수이다. 일반 변수, 클래스등 이 함수 내에서 초기화를 해주면 게임이 켜지고 처음 한번 초기화 해준다.
내부에는 base.Initialize(); 를 꼭 써주어야 하는데, 이건 부모 클래스의 초기화를 해주는 구문을 가져오는 것이다.
- protected override void LoadContent()
이 함수는 이미지를 로드하는 것들을 모아둬서 여기서 로드를 해주면 되는데, Init 하고 별 다른 것은 없다. 그냥 명시적으로 나눠놓았을 뿐이고, Init에서 이미지를 로드해도 상관 없다.
- protected override void UnloadContent()
이 함수는 이미지 로드한 것들을 해제해주는 함수인데, 별 의미는 없다. 끝날 때 null 처리만 제대로 해주도록 하자.
- protected override void Update(GameTime gameTime)
이 함수는 업데이트함수이며, 계속 돌아간다.
내부에는
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
base.Update(gameTime);
이러한 구문이 존재하는데, if문부터 this.exit() 까지는 필요 없고, base.Update(gameTime); 만 넣어주도록 하자.
- protected override void Draw(GameTime gameTime)
뿌려주는 역할을 하는 함수이다. 여기서 SpriteBatch를 초기화 해주고 화면을 뿌려주는 작업을 해주면 된다.
마찬가지로 base.Draw(gameTime); 만 꼭꼭 해주면 된다.
위의 언급한 함수들은 게임에서 제일 중요한 역할을 하는 함수들이며, 이 함수들을 이용해서 우리가 원하는 프레임워크를 구축하고 래핑하면 된다.
다음 글은 이미지를 뿌리는 것을 해보도록 하자.
'Game Programming > XNA' 카테고리의 다른 글
XNA :: XNA Game Studio 4.0 # 6 - 비디오 출력 (0) | 2015.04.22 |
---|---|
XNA :: XNA Game Studio 4.0 # 5 - 사운드 출력 (0) | 2015.04.22 |
XNA :: XNA Game Studio 4.0 # 4 - 레이블 (폰트) 출력 (0) | 2015.04.20 |
XNA :: XNA Game Studio 4.0 # 3 - 이미지 출력 (0) | 2015.04.20 |
XNA :: XNA Game Studio 4.0 # 1 - 설치 (0) | 2015.04.17 |
댓글
VallistA
병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!
자고 싶습니다. ㅠㅠ
Github :: 링크
궁금한점 문의 주시면 답변드리도록 하겠습니다
VISITED
Today :
Total :
Lately Post
Lately Comment