스프라이트 기반 게임 작성

Applies to Windows and Windows Phone

2D 액션 게임 만들기는 모든 플랫폼에서의 개발을 위한 통과 의례입니다.

2D 게임 작성

2D 게임 작성을 시작하는 여러 가지 방법이 있습니다. 가장 기본적인 요구 사항은 화면의 특정 위치에 이미지를 표시하고 사용자 입력에 반응할 수 있어야 한다는 것뿐입니다.

iOS 개발자는 UIImage 컨트롤만 사용하여 게임을 작성했거나 OpenGL ES에서 고유한 스프라이트 루틴을 시작했을 수 있습니다. 앱을 Windows 8으로 포팅하는 경우 iOS 및 Windows 기술 간에 직접적인 상관 관계가 없으므로 여러 가지 방법의 장단점을 신중하게 검토해야 합니다. 예를 들어 XAML canvas 또는 HTML canvas 솔루션을 사용하는 게임은 쉽고 빠르게 개발할 수 있지만 복잡한 액션에 필요한 성능이 부족할 수 있습니다. 반면, DirectX 및 C++는 단순한 앱에 지나칠 수 있습니다.

일반적인 iOS 개발 패턴에 가장 가까운 Windows 8 기술의 빠른 요약은 다음과 같습니다. 직접 일치는 아니지만 관련 작업을 파악하는 데 도움이 됩니다.

iOS 기술Windows 8 기술
UIKit(UIImage, UIButton, UILabel 등)XAML canvas 또는 HTML canvas
스프라이트가 사각형 또는 포인트 스프라이트로 렌더링되는 OpenGL ES 코드스프라이트가 텍스처로 렌더링되는 DirectX
SpriteKit스프라이트가 텍스처로 렌더링되는 DirectX
Cocos2D 같은 타사 프레임워크Cocos2D-X 같은 타사 프레임워크
Unity3D 같은 타사 게임 제작 도구Unity3D 같은 타사 게임 제작 도구

 

MonoGame 소개

MonoGame은 기본적인 스프라이트 라이브러리를 찾고 있는 iOS 개발자에게 유용한 솔루션입니다. MonoGame은 2D 스프라이트 기반 게임을 쉽게 작성할 수 있도록 디자인된 DirectX용 오픈 소스 C# 래퍼입니다. 성능과 사용 편의성 간의 적절한 균형을 제공합니다.

이전에 Windows, Windows Phone 또는 Xbox용 캐주얼 게임을 작성한 경험이 있는 경우 XNA 게임 프레임워크에 대해 알고 있을 것입니다. XNA는 Windows 또는 Windows Phone에서 더 이상 지원되지 않지만 MonoGame을 해당 용도로 활용할 수 있습니다. MonoGame은 원래 XNA의 플랫폼 간 버전으로 고안되었습니다. 이제 MonoGame을 사용하여 보유한 기존 XNA 프로젝트를 완료하는 것은 물론 Windows용 게임을 처음부터 작성한 다음 Windows Phone, iOS 및 Android에서 실행할 수 있습니다.

MonoGame을 사용하여 앱 빌드

MonoGame은 Visual Studio Express 버전을 지원하므로 Windows 8용 스프라이트 기반 게임 작성을 무료로 시작할 수 있습니다. MonoGame을 설치하면 Visual Studio에서 새 프로젝트 템플릿을 여러 개 제공합니다. 최상의 성능을 얻으려면 MonoGame Windows 스토어 프로젝트 템플릿을 사용합니다. 그러나 텍스트 오버레이, 단추 또는 기타 컨트롤을 제공하기 위해 XAML 컨트롤을 이용하려는 경우 MonoGame Windows 스토어(XAML) 프로젝트를 사용할 수도 있습니다.

MonoGame 프로젝트 템플릿

템플릿으로 만든 C# 프로젝트는 쉽게 이해할 수 있으며 LoadContent(), Update()Draw()를 포함하여 구현할 여러 메서드를 자동으로 만듭니다.

MonoGame은 스프라이트를 자동으로 렌더링하지만 한 가지 문제가 있습니다. MonoGame에서 이미지를 그리려면 이미지가 .xnb 형식이어야 합니다. 간단하게 PNG 파일을 포함하여 렌더링할 수 없습니다. 이전에 XNA를 사용할 때는 콘텐츠 파이프라인 방법을 통해 프로젝트에 PNG를 포함할 수 있었으며, .xnb 파일이 자동으로 생성되었습니다. 이제 MonoGame은 고유한 콘텐츠 파이프라인을 지원(자세한 내용은 GitHub의 이 페이지 참조)하거나 다음 기술을 사용합니다.

Visual Studio 2012 Express for Phone을 설치합니다. 이 버전은 Windows Phone 7용 XNA 앱 빌드를 계속 지원합니다. 처음에는 프로세스가 매끄럽지 않은 것 같아도 잘 작동합니다. 새 Windows Phone 7 XNA 프로젝트를 만들어 PNG 아트워크에 넣은 다음 프로젝트를 빌드하고(실행할 필요 없이 빌드만 하면 됨) 새 Windows 8 프로젝트에 .xnb 파일을 복사하면 됩니다. 소리 효과 및 셰이더에도 동일한 방법이 사용됩니다.

예제 C# 코드

다음은 플레이어의 스프라이트가 대상 스프라이트에 부딪쳐서 파괴하면 포인트를 얻게 되는 게임의 시작 부분입니다. 이 코드는 게임 세계를 변화시킬 것입니다. 먼저 목록을 만들어 대상 스프라이트의 위치를 저장하고, 변수를 만들어 플레이어 개체의 위치를 저장합니다.


        private List<Vector2> ball_locations;
        private Vector2 player;

그런 다음 Initialize() 메서드에서 초기화합니다.


        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();

            ball_locations = new List<Vector2>();

            for (float y = 40; y < 700; y += 60)
                for (float x = 100; x < 500; x += 60)
                {
                    ball_locations.Add(new Vector2(x,y));
                }

            player = new Vector2(1000, 400);
        }

Vector2는 X 및 Y 좌표가 포함된 새 데이터 형식입니다. Vector3과 더불어 게임을 작성할 때 유용합니다.

LoadContent() 메서드에서 필요한 이미지가 포함된 .xnb 파일을 로드합니다. 앞에서 언급했듯이 이러한 .xnb 파일은 별도의 Windows Phone XNA 프로젝트에 작성되었습니다. 이 예제에서는 두 개의 이미지(배경을 위한 우주 이미지 및 흰색 공 1개 이미지)를 사용합니다. MonoGame을 사용하면 이미지를 그릴 때 색을 추가할 수 있으므로 가능한 모든 색의 공을 만들지 않아도 됩니다.


        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

            _backgroundTexture = Content.Load<Texture2D>("starfieldImage");
            _ball = Content.Load<Texture2D>("ballImage");

        }

이제 개체를 그룹니다. XNA와 마찬가지로 MonoGame은 SpriteBatch라는 개체를 사용하여 스프라이트를 렌더링합니다. SpriteBatch를 만든 다음 Begin()End() 메서드를 호출하고, 그 사이에 스프라이트를 그려야 합니다. 매 프레임마다 화면을 지우는 것도 중요하므로 이 예제에서는 전체 화면을 채우도록 우주 이미지를 그립니다.


        protected override void Draw(GameTime gameTime)
        {
            _spriteBatch.Begin();

            // Draw backgound (also clears screen)
            _spriteBatch.Draw(_backgroundTexture, GraphicsDevice.Viewport.Bounds, Color.White);

            // Draw the target balls in alternating colors
            int i = 0;
            foreach (Vector2 v in ball_locations)
            {
                switch (i)
                {
                    case 0: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Red); break;
                    case 1: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Green); break;
                    case 2: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Blue); break;
                    case 3: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Yellow); break;
                }
                i++; if (i > 3) i = 0;
            }

            // Draw player's ball
            _spriteBatch.Draw(_ball, new Rectangle((int)player.X, (int)player.Y, 50, 50), Color.White);

            _spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}

이 앱을 실행하면 다음과 같이 나타납니다.

MonoGame 프로젝트 템플릿

확실히 아직 부족한 점이 많습니다. 다양한 화면 개체의 위치 업데이트는 매 프레임마다 자동으로 호출되는 Update() 메서드에서 수행됩니다. 텍스트 표시도 약간의 작업이 필요합니다. XAML 프로젝트를 사용하도록 선택하여 TextBlock 컨트롤 및 Button 개체를 오버레이하거나, MonoGame SpriteBatch 텍스트 렌더링을 사용할 수 있습니다. SpriteBatch 렌더링을 사용하면 텍스트 렌더링이 더 빠르지만 PNG 파일에서 .xnb 이미지를 만들 때와 동일한 방식으로 XNA 프로젝트에 글꼴 개체를 만들어야 합니다.

MonoGame에서 게임을 만들려는 경우 MonoGame.net 웹 사이트에 많은 자습서 및 도움말 파일이 있습니다. Adam Dawes가 저술한 책 Windows 8 and Windows Phone 8 Game Development도 훌륭한 가이드입니다.

관련 항목

XNA 게임 프레임워크
MonoGame
XNA부터 MonoGame까지(Gamasutra)
코드 라이브러리, 도구 키트 및 기타 도움말 소스
XAML, C# 및 C++로 작성한 Windows 스토어 게임 Reversi
DirectX 게임 개발 및 샘플 연습

 

 

표시:
© 2014 Microsoft