エクスポート (0) 印刷
すべて展開

方法: Windows Phone 用の初めての XNA Framework アプリケーションを作成する

2012/02/09

このトピックでは、基本的な Windows Phone の XNA Framework アプリケーションを作成するのに必要な手順について説明します。完成した Hello XNA Framework のサンプルは、「Windows Phone のコード サンプル」にあります。

注注:

次の手順は、Visual Studio 2010 Express for Windows Phone 向けです。 Visual Studio 2010 Professional や Visual Studio 2010 Ultimate のアドインを使用している場合は、メニュー コマンドやウィンドウのレイアウトが多少異なる場合があります。

Windows Phone の XNA Framework アプリケーションを作成する最初の手順として、新しいプロジェクトを作成します。

新しいプロジェクトを作成するには

  1. Windows Phone SDK をダウンロードし、インストールしていることを確認します。詳細については、「Windows Phone SDK のインストール」を参照してください。

  2. Windows のスタート メニューから Visual Studio 2010 Express for Windows Phone を起動します。[登録] ウィンドウが表示される場合、登録するか、一時的に閉じることができます。

  3. 新しいプロジェクトを作成するには、[ファイル]、[新しいプロジェクト] の順にメニュー コマンドを選択します。

  4. [新しいプロジェクト] ウィンドウが表示されます。Visual C# のテンプレートを展開して、XNA Game Studio 4.0 のテンプレートを選択します。

  5. Windows Phone Game (4.0) テンプレートを選択します。目的のプロジェクトの [名前] を入力します。また、位置ソリューション名を指定する、あるいは既定値のまま残すこともできます。

    GetStartedNewProjectXNA
  6. [OK] をクリックします。Windows Phone の [プラットフォームの選択] ウィンドウが表示されます。[対象の Windows Phone バージョン] の [Windows Phone 7.1] を選択します。

    GetStartedSelectPlatformXNA
  7. [OK] をクリックします。新しいプロジェクトが作成され、Visual Studio で Game1.cs ソース ファイルが開きます。

次に、プロジェクトにコンテンツを追加します。ここでは、グラフィック オブジェクトとサウンド ファイルを追加します。

プロジェクトにコンテンツを追加するには

  1. ソリューション エクスプローラーが Visual Studio に表示されていることを確認します。表示されていない場合は、[表示]、[その他のウィンドウ]、[ソリューション エクスプローラー] の順に選択してソリューション エクスプローラーを表示します。

  2. 最初にグラフィック ファイルを追加します。この例では、このプロジェクトによって WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1 ディレクトリに既定で作成された PhoneGameThumb.png ファイルを使用します。PhoneGameThumb.png または独自のグラフィック ファイルのどちらを使用することもできますが、グラフィック オブジェクトは約 64 x 64 ピクセルのサイズである必要があります。

    コンテンツ ノード (この例では WindowsPhoneGame1Content (Content) というノード) を右クリックし、[追加]、[既存の項目] の順に選択します。グラフィック ファイルの場所まで移動します。この場合は、WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1\PhoneGameThumb.png まで移動し、[追加] をクリックします。グラフィック オブジェクトがプロジェクトに追加されます。

    ソリューション エクスプローラーでグラフィック名を選択し、[プロパティ] ウィンドウでファイル プロパティを確認します。グラフィック オブジェクトのアセット名を確認します。この場合は、PhoneGameThumb です。

    GetStartedPropertiesXNA
  3. 次に、サウンド ファイルを追加します。ここでは、Microsoft Windows 7 に付属する Windows Ding.wav サウンド ファイルを使用します。コンピューターにある Windows Ding.wav を見つけて、WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1 ディレクトリにコピーします。独自のサウンド ファイルを使用することもできますが、約 1 秒の短いサウンドが推奨されます。

    コンテンツ ノード (この例では WindowsPhoneGame1Content (Content) というノード) を右クリックし、[追加]、[既存の項目] の順に選択します。サウンド ファイルの場所まで移動します。この場合は、WindowsPhoneGame1\WindowsPhoneGame1\WindowsPhoneGame1\Windows Ding.wav まで移動し、[追加] をクリックします。サウンド ファイルがプロジェクトに追加されます。

    ソリューション エクスプローラーでサウンド ファイルを選択し、[プロパティ] ウィンドウでファイル プロパティを確認します。サウンドのアセット名を確認します。この場合は、Windows Ding です。

この手順では、画面全体を動き回る 2 つのグラフィック オブジェクトが互いに衝突したときにサウンドを再生するコードを追加します。既定でプロジェクトに追加されたコードを確認します。ゲーム アプリケーションのフレームワークが提供されています。次の手順では、以下を実行します。

  • 変数の追加。

  • グラフィック オブジェクトとサウンド アセットを LoadContent メソッドで読み込みます。

  • グラフィック オブジェクトを Draw ループで画面に描画します。

  • グラフィック オブジェクトの位置を更新し、Update ループで衝突を検出します。

コードを追加するには

  1. Game1 クラスに以下の変数をコピーして貼り付け、既存の SpriteBatch spriteBatch 変数の後に配置します。それぞれのグラフィック オブジェクトとその位置、速度、高さ、幅を追跡する変数のペアがあります。また、サウンド効果を格納する 1 つの変数もあります。

    
            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 メソッドを以下のコード行で置き換えます。このコードはグラフィック オブジェクトを 2 回読み込みます。後で、2 つ目のグラフィック オブジェクトをプロジェクトに追加して、2 つの別々のオブジェクトが画面全体を動き回るようにすることもできます。各グラフィック オブジェクトの画面上の初期位置が指定され、それぞれの高さと幅が計算されます。

    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 Emulator] に設定します。

    エミュレーターを選択している標準ツールバー上のターゲット

  3. [デバッグ]、[デバッグ開始] の順にメニュー コマンドを選択してアプリケーションを実行します。これによってエミュレーター ウィンドウが開き、アプリケーションが起動します。画面全体を動き回るグラフィックが交差したときにサウンドが再生されます。

    GetStartedFirstAppRunningXNA
  4. エミュレーターがタイムアウトしてロック画面になった場合、ロックを解除するには、画面の下部をクリックして、上方にスワイプします。

  5. コードにデバッグ ブレークポイントを設定するには、コードの目的の行にカーソルを置き、[デバッグ]、[ブレークポイントの設定/解除] の順にメニュー コマンドを選択します。

  6. デバッグを停止するには、[デバッグ]、[デバッグの停止] の順にメニュー コマンドを選択します。

これで、Windows Phone の基本的な XNA Framework アプリケーションが作成されました。Microsoft XNA Game Studio 開発の詳細については、「XNA Game Studio 4.0」を参照してください。

表示:
© 2014 Microsoft