내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8용 첫 번째 XNA Game Studio 4.0 앱을 만드는 방법

2014-06-18

적용 대상: Windows Phone OS 7.1

 

이 항목에서는 첫 번째 Windows Phone 용 XNA Game Studio 4.0 앱을 만드는 데 도움이 되는 단계별 지침을 제공합니다. 전체 Hello XNA Framework 시작 샘플을 다운로드할 수도 있습니다.

Windows Phone OS 7.1 을 대상으로 하는 XNA Game Studio 4.0 앱은 계속해서 완전하게 지원되며 Windows Phone 8 단말기에서 실행됩니다. 하지만 Windows Phone OS 8.0 에서 실행하기 위해 XNA Framework 앱을 컴파일하거나 업그레이드할 수 없습니다. Windows Phone 8 에서 XNA Framework 앱 지원에 대한 자세한 내용은 Windows Phone 8의 XNA Framework 및 앱 개발을 참조하세요.

참고참고:

다음 절차의 단계는 Visual Studio Express 2012 for Windows Phone 에 대한 것입니다. Visual Studio 에서 이미 레이아웃이나 메뉴를 사용자 지정했거나 Visual Studio Professional 이상을 사용하는 경우 메뉴 명령이나 창 레이아웃이 약간 차이를 보일 수 있습니다.

이 항목에는 다음 단원이 포함되어 있습니다.

 

Windows Phone 용 XNA Game Studio 4.0 앱을 만드는 첫 번째 단계는 새 프로젝트를 만드는 것입니다.

프로젝트를 만들려면

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

  2. Windows 시작 화면에서 Visual Studio 를 시작합니다. 등록 창이 나타나면 제품을 등록하거나 등록 메시지를 일시적으로 해제할 수 있습니다.

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

  4. Visual C# 템플릿 목록의 XNA Game Studio 4.0 그룹에서 Windows Phone Game (4.0) 템플릿을 선택합니다. 새 프로젝트 창 아래쪽에서 WindowsPhoneGame1을 프로젝트의 이름으로 유지할 수 있습니다.

    GetStartedNewProjectXNA
  5. 확인을 클릭합니다. Windows Phone OS 7.1 을 대상으로 지정하는 XNA Framework 앱만 만들 수 있으므로 Windows Phone 플랫폼 선택 대화 상자가 나타나지 않습니다.

  6. 새 프로젝트가 만들어지고 Game1.cs가 Visual Studio 디자이너에서 열립니다.

다음 단계에서는 그래픽 개체 및 사운드 파일을 솔루션에 추가합니다.

콘텐츠를 추가하려면

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

  2. 솔루션 탐색기에서 앱의 콘텐츠를 포함하도록 만들어진 두 번째 프로젝트를 확인합니다. 기본 프로젝트 이름을 유지하면 이 콘텐츠 프로젝트가 WindowsPhoneGame1Content (Content)로 나타납니다. 이 절차에서는 콘텐츠 파일을 이 프로젝트에 추가합니다.

  3. 추가할 첫 번째 항목은 그래픽 파일입니다. 기본적으로 새 프로젝트에 추가된 PhoneGameThumb.png를 사용하거나 사용자 지정 그래픽 파일을 사용할 수 있습니다. 최상의 결과를 얻으려면 그래픽 개체의 크기가 약 64 x 64픽셀이어야 합니다.

    솔루션 탐색기에서 콘텐츠 프로젝트의 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 추가 | 기존 항목을 선택합니다. 기존 항목 추가 대화 상자의 파일 형식 목록에서 이미지 파일을 선택합니다. 그래픽 파일로 이동하여 선택한 다음 추가를 클릭합니다. 그래픽 개체가 프로젝트에 추가됩니다.

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

  4. 추가할 다음 항목은 사운드 파일입니다. 이 예제에서는 Windows와 함께 제공된 Windows Ding.wav 사운드 파일을 사용합니다. 사용자 지정 사운드 파일을 사용할 수도 있습니다. 1초 정도의 매우 짧은 사운드를 사용하는 것이 좋습니다.

    솔루션 탐색기에서 콘텐츠 프로젝트의 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 추가 | 기존 항목을 선택합니다. 기존 항목 추가 대화 상자의 파일 형식 목록에서 오디오 파일을 선택합니다. C:\Windows\Media로 이동하여 Windows Ding.wav를 선택하고 추가를 클릭합니다. 사운드 파일이 프로젝트에 추가됩니다.

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

    다음 그림에서는 그래픽 파일 및 사운드 파일이 있는 콘텐츠 프로젝트를 보여 줍니다.

    GetStartedPropertiesXNA

이 단계에서는 화면에서 2개 그래픽 개체를 이동하고 그래픽 개체가 충돌하는 경우를 감지한 다음 이때 사운드를 재생하는 코드를 추가합니다. 새 프로젝트에서 기본적으로 게임 앱의 프레임워크가 제공되었습니다. 다음 단계에서는 다음 작업을 완료합니다.

  • 몇 가지 변수를 추가합니다.

  • 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 메서드는 2개 그래픽 개체의 범위가 서로 교차하는지 확인하는 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 에뮬레이터 에 대한 값 중 하나(예: Emulator WVGA)로 설정되어 있는지 확인합니다.

    Target on Standard Toolbar selecting emulator

  3. F5 키를 누르거나 디버그 | 디버깅 시작 메뉴 명령을 눌러 앱을 실행합니다. 이렇게 하면 에뮬레이터 창이 열리고 앱이 시작됩니다. 2개 그래픽이 화면에서 바운스하고 그래픽이 교차할 때 소리가 들립니다.

    GetStartedFirstAppRunningXNA
  4. 잠금 화면이 적용되면 마우스로 화면 아래쪽을 클릭하고 위쪽으로 살짝 밀어서 에뮬레이터를 잠금 해제할 수 있습니다.

  5. 디버깅을 중지하려면 디버그 | 디버깅 중지 메뉴 명령을 선택할 수 있습니다.

이제 Windows Phone 용 기본 XNA Game Studio 4.0 앱을 만들었습니다. XNA Game Studio 개발에 대한 자세한 내용은 다음 항목을 참조하세요.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft