정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

방법: Windows Phone용 첫 번째 XNA Framework 응용프로그램 만들기

2012-02-09

이 항목에서는 Windows Phone 용 기본 XNA Framework 응용프로그램을 만드는 데 필요한 단계에 대해 소개합니다. Windows Phone용 코드 샘플에서 이러한 완료된 XNA Framework 시작 샘플을 확인할 수 있습니다.

참고참고:

다음 절차의 단계는 Windows Phone용 Visual Studio 2010 Express에 적용됩니다. Visual Studio 2010 Professional 또는 Visual Studio 2010 Ultimate용 추가 기능을 사용하는 경우에는 메뉴 명령이나 창 레이아웃에서 일부 소규모 변형이 나타날 수 있습니다.  

Windows Phone 용 XNA Framework 응용프로그램을 만드는 첫 번째 단계는 새 프로젝트를 만드는 것입니다.

새 프로젝트를 만들려면

  1. Windows Phone SDK 를 다운로드하여 설치했는지 확인합니다. 자세한 내용은 Windows Phone SDK 설치를 참조하십시오.

  2. Windows 시작 메뉴에서 Windows Phone용 Visual Studio 2010 Express 를 시작합니다. 등록 창이 나타나면 등록하거나 일시적으로 취소할 수 있습니다.

  3. 파일 | 새 프로젝트 메뉴 명령을 선택하여 새 프로젝트를 만듭니다.

  4. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장하고 XNA Game Studio 4.0 템플릿을 선택합니다.

  5. Windows Phone Game (4.0) 템플릿을 선택합니다. 원하는 대로 프로젝트 이름을 입력합니다. 위치솔루션 이름을 지정하거나 기본값을 그대로 둘 수 있습니다.

    GetStartedNewProjectXNA
  6. 확인을 클릭합니다. Windows Phone 플랫폼 선택 창이 나타납니다. 대상 Windows Phone 버전으로 Windows Phone 7.1을 선택합니다.

    GetStartedSelectPlatformXNA
  7. 확인을 클릭합니다. 새 프로젝트가 생성되고 Visual Studio 에서 Game1.cs 소스 파일이 열립니다.

다음 단계는 프로젝트에 콘텐츠를 추가하는 것입니다. 이 경우, 그래픽 개체 및 사운드 파일을 추가합니다.

프로젝트에 콘텐츠를 추가하려면

  1. Visual Studio 에 솔루션 탐색기가 표시되는지 확인합니다. 솔루션 탐색기가 표시되지 않는 경우 보기 | 다른 창 | 솔루션 탐색기를 선택하여 표시합니다.

  2. 첫 번째로 추가할 항목은 그래픽 파일입니다. 이 예에서는 이 프로젝트에서 기본적으로 WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1 디렉터리에 만들어진 PhoneGameThumb.png 파일을 사용합니다. PhoneGameThumb.png 또는 자신의 고유한 그래픽 파일을 사용할 수 있습니다. 하지만 최상의 결과를 위해서는 그래픽 개체 크기가 약 64 x 64 픽셀이어야 합니다.

    Content 노드를 마우스 오른쪽 버튼으로 클릭합니다. 이 경우에는 WindowsPhoneGame1Content (Content)라는 노드입니다. 그리고 추가 | 기존 항목을 선택합니다. 그래픽 파일(이 경우 WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1\PhoneGameThumb.png)을 찾은 다음 추가를 클릭합니다. 그래픽 개체가 프로젝트에 추가됩니다.

    솔루션 탐색기에서 그래픽 이름을 선택한 후 속성 창에서 파일 속성을 확인합니다. 그래픽 개체의 자산 이름을 확인합니다. 이 경우에는 PhoneGameThumb입니다.

    GetStartedPropertiesXNA
  3. 다음 단계는 사운드 파일을 추가하는 것입니다. 이 예에서는 Microsoft Windows 7과 함께 제공되는 Windows Ding.wav 사운드 파일을 사용하겠습니다. 컴퓨터에서 Windows Ding.wav를 검색하고 이 파일을 WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1 디렉터리에 복사합니다. 자신의 고유한 사운드 파일을 사용할 수도 있지만, 사운드가 1초 정도로 아주 짧은 것이 좋습니다.

    Content 노드를 마우스 오른쪽 버튼으로 클릭합니다. 이 경우에는 WindowsPhoneGame1Content (Content)라는 노드입니다. 그리고 추가 | 기존 항목을 선택합니다. 사운드 파일(이 경우 WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1\Windows Ding.wav)을 찾은 다음 추가를 클릭합니다. 사운드 파일이 프로젝트에 추가됩니다.

    솔루션 탐색기에서 사운드 파일을 선택한 후 속성 창에서 파일 속성을 확인합니다. 사운드 파일의 자산 이름을 확인합니다. 이 경우에는 Windows Ding입니다.

이 단계에서는 그래픽 개체 두 개를 화면에서 이동하고, 그래픽 개체 충돌을 감지하며, 그래픽 개체 충돌 시 사운드를 재생하는 코드를 추가합니다. 프로젝트에서 기본적으로 자동 추가된 코드를 확인합니다. 게임 응용프로그램의 프레임워크가 제공되었습니다. 다음 단계는 아래 프로세스를 단계적으로 안내합니다.

  • 일부 변수를 추가합니다.

  • LoadContent 메서드에서 그래픽 개체 및 사운드 자산을 로드합니다.

  • Draw 루프에서 그래픽 개체를 화면에 그립니다.

  • Update 루프에서 그래픽 개체의 위치를 업데이트하고 충돌을 검색합니다.

코드를 추가하려면

  1. 다음 변수를 복사하여 Game1 클래스에 붙여 넣고 기존 SpriteBatch spriteBatch 변수 뒤에 배치합니다. 각 그래픽 개체와 해당 위치, 속도, 높이, 너비를 추적하는 변수 쌍이 있습니다. 또한 사운드 효과를 유지하는 변수도 있습니다.

    
            Texture2D texture1;
            Texture2D texture2;
            Vector2 spritePosition1;
            Vector2 spritePosition2;
            Vector2 spriteSpeed1 = new Vector2(50.0f, 50.0f);
            Vector2 spriteSpeed2 = new Vector2(100.0f, 100.0f);
            int sprite1Height;
            int sprite1Width;
            int sprite2Height;
            int sprite2Width;
    
            SoundEffect soundEffect;
    
    
  2. LoadContent 메서드를 다음 코드 줄로 대체합니다. 이 코드는 그래픽 개체를 두 번 로드합니다. 이후에 두 번째 그래픽 개체를 프로젝트에 추가하여, 서로 다른 두 그래픽 개체가 화면에서 바운스 효과로 이동하도록 만들 수도 있습니다. 각 그래픽 개체에 화면 상의 초기 위치가 지정되며, 개체별 높이 및 너비가 계산됩니다.

    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);
    
        texture1 = Content.Load<Texture2D>("PhoneGameThumb");
        texture2 = Content.Load<Texture2D>("PhoneGameThumb");
      
        soundEffect = Content.Load<SoundEffect>("Windows Ding");
    
        spritePosition1.X = 0;
        spritePosition1.Y = 0;
    
        spritePosition2.X = graphics.GraphicsDevice.Viewport.Width - texture1.Width;
        spritePosition2.Y = graphics.GraphicsDevice.Viewport.Height - texture1.Height;
    
        sprite1Height = texture1.Bounds.Height;
        sprite1Width = texture1.Bounds.Width;
    
        sprite2Height = texture2.Bounds.Height;
        sprite2Width = texture2.Bounds.Width;
    }
    
    
  3. Draw 메서드를 다음 코드 줄로 대체합니다. 이 코드는 화면의 현재 위치에 각 그래픽 개체를 그립니다. 이 예제에서는 각 스프라이트에 대해 동일한 그래픽 파일을 사용하기 때문에, 다른 BlendState를 지정하여 약간 다르게 표현되도록 합니다.

    protected override void Draw(GameTime gameTime)
    {
        graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
        // Draw the sprite.
        spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
        spriteBatch.Draw(texture1, spritePosition1, Color.White);
        spriteBatch.End();
    
        spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.Opaque);
        spriteBatch.Draw(texture2, spritePosition2, Color.Gray);
        spriteBatch.End();
    
        base.Draw(gameTime);
    
    }
    
    
  4. Update 메서드를 다음 코드 줄로 대체합니다. 이 코드는 또한 UpdateSpriteCheckForCollision 메서드도 추가합니다. Update 메서드의 새 코드는 각 스프라이트에게 UpdateSprite 메서드 내의 위치를 업데이트하도록 지시합니다. UpdateSprite 메서드는 스프라이트가 측면에 닿는지 여부를 확인하고 닿는 겨우 방향을 변경합니다. 마지막으로, Update는 각 그래픽 개체의 경계가 다른 개체 경계와 서로 교차하는지 여부를 확인하는 CheckForCollision을 호출합니다. 경계가 교차하는 경우 사운드가 재생됩니다.

    protected override void Update(GameTime gameTime)
    {
        // Allow the game to exit.
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
            ButtonState.Pressed)
            this.Exit();
    
        // Move the sprite around.
        UpdateSprite(gameTime, ref spritePosition1, ref spriteSpeed1);
        UpdateSprite(gameTime, ref spritePosition2, ref spriteSpeed2);
        CheckForCollision();
    
        base.Update(gameTime);
    }
    
    void UpdateSprite(GameTime gameTime, ref Vector2 spritePosition, ref Vector2 spriteSpeed)
    {
        // Move the sprite by speed, scaled by elapsed time.
        spritePosition +=
            spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
    
        int MaxX =
            graphics.GraphicsDevice.Viewport.Width - texture1.Width;
        int MinX = 0;
        int MaxY =
            graphics.GraphicsDevice.Viewport.Height - texture1.Height;
        int MinY = 0;
    
        // Check for bounce.
        if (spritePosition.X > MaxX)
        {
            spriteSpeed.X *= -1;
            spritePosition.X = MaxX;
        }
    
        else if (spritePosition.X < MinX)
        {
            spriteSpeed.X *= -1;
            spritePosition.X = MinX;
        }
    
        if (spritePosition.Y > MaxY)
        {
            spriteSpeed.Y *= -1;
            spritePosition.Y = MaxY;
        }
    
        else if (spritePosition.Y < MinY)
        {
            spriteSpeed.Y *= -1;
            spritePosition.Y = MinY;
        }
    
    }
    
    void CheckForCollision()
    {
        BoundingBox bb1 = new BoundingBox(new Vector3(spritePosition1.X - (sprite1Width / 2), spritePosition1.Y - (sprite1Height / 2), 0), new Vector3(spritePosition1.X + (sprite1Width / 2), spritePosition1.Y + (sprite1Height / 2), 0));
    
        BoundingBox bb2 = new BoundingBox(new Vector3(spritePosition2.X - (sprite2Width / 2), spritePosition2.Y - (sprite2Height / 2), 0), new Vector3(spritePosition2.X + (sprite2Width / 2), spritePosition2.Y + (sprite2Height / 2), 0));
    
        if (bb1.Intersects(bb2))
        {
            soundEffect.Play();
        }
    
    }
    
    
    

이제 응용프로그램이 완성되었습니다. 이번 단계에서는 응용프로그램을 빌드하고 실행하며 디버그합니다.

응용프로그램을 빌드하고 디버그하려면

  1. 디버그 | 솔루션 빌드 메뉴 명령을 선택하여 솔루션을 빌드합니다. 오류 목록 창에 오류가 나타나지 않고 프로젝트가 빌드되어야 합니다. 오류 목록 창이 아직 열려 있지 않으면 보기 | 다른 창 | 오류 목록 메뉴 명령을 선택하여 이 창을 열 수 있습니다. 오류가 있는 경우 이전 단계를 검토하고 오류를 수정한 다음 솔루션을 다시 빌드합니다.

  2. 표준 도구 모음에서 응용프로그램 배포 대상을 Windows Phone 에뮬레이터로 설정합니다.

    에뮬레이터를 선택하는 표준 도구 모음의 대상

  3. 디버그 | 디버깅 시작 메뉴 명령을 선택하여 응용프로그램을 실행합니다. 에뮬레이터 창이 열리고 응용프로그램이 시작됩니다. 두 그래픽이 화면에서 바운스 효과로 이동하며 서로 교차하는 경우 사운드가 재생되는 것은 확인하게 됩니다.

    GetStartedFirstAppRunningXNA
  4. 에뮬레이터가 시간 초과되어 잠금 화면으로 전환되면 화면 맨 아래를 클릭하고 위로 밀어 잠금을 해제할 수 있습니다.

  5. 원하는 코드 줄에 커서를 두고 디버그 | 중단점 설정/해제 메뉴 명령을 선택하여 코드에 디버그 중단점을 설정할 수 있습니다.

  6. 디버그를 중지하려면 디버그 | 디버깅 중지 메뉴 명령을 선택합니다.

이제 Windows Phone 용 기본 XNA Framework 응용프로그램을 만들었습니다. XNA Game Studio 개발에 대한 자세한 내용은 XNA Game Studio 4.0을 참조하십시오.

표시:
© 2014 Microsoft