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); 만 꼭꼭 해주면 된다.

 

 

위의 언급한 함수들은 게임에서 제일 중요한 역할을 하는 함수들이며, 이 함수들을 이용해서 우리가 원하는 프레임워크를 구축하고 래핑하면 된다.

다음 글은 이미지를 뿌리는 것을 해보도록 하자.

 

 

 

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment