|
XNA란? |
간단하게 XNA를 말을 하면 멀티플랫폼 환경에서 손쉬운 게임개발을 목표로 하는 게임 개발환경으로 .NET환경에서 C#언어를 주로 사용 한다. Microsoft에서는 누구나 쉽게 게임 개발의 목표로 하였습니다. XNA를 통하면 입력 장치 (키보드, 게임패트, 컨트롤러, 마우스 등)와 그래픽 하드웨어에 쉽게 접근 할 수 있습니다. 이를 사용 하기 위해서는 먼저 설치해야 되는 소프트웨어가 있다. 일단 DirectX이 설치 하여야 합니다. XNA 게임 스튜디오 익스프레스는 사용하는 것에 대해서는 무료로 사용 할 수 있습니다. -XNA의 기본값은 초당 60FPS로 다시 그려 주고 있습니다. Winphone는 초당 30FPS 입니다. |
XNA 설치 |
|
http://create.msdn.com/en-us/resources/downloads 위의 사이트에 가서 XP전용 XNA Game Studio를 다운 받고 깔면 된다. 다만 4.0은 Microsoft Visual Studio 2010에서 박에 사용을 할수 없다. 2008에서 사용을 할려면 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=80782277-d584-42d2-8024-893fcd9d3e82&displaylang=en 에 링크가 되어 있다. 여기서 3.1을 다운 받고 깔면 된다. |
XNA 시작 |
|
다음과 같이 XNA Game Studio3.1을 선택 하고 Windows Game3.1선택하여 만든다. |
XNA 메소드(생성자) |
GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsFixedTimeStep = false; } |
생성자와 필드 부분입니다. GraphicsDeviceManager를 생성 하여 지정된 게임의 구성 및 관리그래픽 장치를 처리를 하기 위하여 레지스터를 사용자 지정 동작이 구현 할 수 있다. IsFixedTimeStep설정을 true로 하고 실행해보면 60FPS에 실행이 된다.false로 설정을 하면 Updata를 기본값(1/60초)로 하지 않겠다는 것이다. |
XNA 메소드(Initialize) |
protected override void Initialize() { // TODO: Add your initialization logic here
base.Initialize(); } |
그리기 전에 초기화를 하는 부분. 로드 할때 LoadContent사용. |
XNA 메소드(LoadContent) |
protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here } |
그래픽 리소스를 호출할때 사용 합니다. Initialize의해 호출이 되고 게임 컨텐트 DevicrReset이벤트가 발생 할때 마다 다시 로드 합니다. LoadContent가 호출 되기 전까지는 GraphicsDevice에 액세스 할 수 가 없다. |
XNA 메소드(UnloadContent) |
protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } |
게임이 종료 되고 컨텐츠를 처리 하는 부분. |
XNA 메소드(Update) |
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); } |
기본적으로 생성 되는 메소드 가운데 가장 중요한 메소드 입니다.(게임논리가 구현되는 부분) Update는 게임 로직을 처리하는 데 필요하다고 판단되면 호출됩니다. 이것은 게임 상태의 관리, 사용자 입력 처리, 또는 시뮬레이션 데이터의 업데이트를 포함할 수 있습니다. 게임 상태를 업데이트하면 게임 난이도와 컨트롤러 감도 등의 설정에 대한 플레이어의 환경 설정을 확인 SignedInGamer.GameDefaults를 검사할 수 있습니다. Update는 위에도 말은 했지만 이 부분과 아래의 Draw 초당 60번 이 실행이 됩니다. |
XNA 메소드(Draw) |
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here
base.Draw(gameTime); } |
Draw메소드도 UpData처럼 중요한 메소드 입니다. 위 글에서 말은 했지만 초당 60번이 실행 되고 있습니다. Draw에서 하는 일은 UpData 및 IsFixedTimeStep가 true 또는 false인지 여부에 따라 다른 속도로 불리는 그립니다. IsFixedTimeStep이 FALSE이면, 업데이트 및 그리기가 가능한 한 자주 순서대로 호출됩니다. IsFixedTimeStep 사실이있다면 가능한 한 자주 호출 계속 그리기 동안, 업데이트, TargetElapsedTime에 지정된 간격으로 호출됩니다. |
참고 문원 : MSDN,Microsoft XNA
참고 블로스 : http://rintiantta.blog.me/40114345444
첫댓글 protected override void UnloadContent() <- 게임이 종료 되고 컨텐츠를 처리 하는 부분이라고 했는데 이 부분에서
게임이 어떻게 종료되는지 어떻게 아나요??
사용자가 게임을 종료시 XNA Framework에서 게임의 Dispose 메서드 호출-> 게임의 Dispose 메서드에서 기본 객체의 Dispose 메서드를 호출->XNA Framework에서 각각의 게임컴포넌트에 해당하는 Dispose 메서드 호출->XNA Framework에서 게임의 UnloadContent 메서드 호출->프로그램의 Dispose 메서드로 focus가 반환되고 결국 프로그램이 종료됨 . 이와 같은 순서로 UnloadContent()를 호출을 하여 컨텐츠를 처리 합니다.