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

方法: XNA Framework アプリケーションを作成する

2012/02/09

このトピックでは、このシリーズを通して使用する XNA Framework アプリケーションの基本的な機能を作成する方法について説明します。このアプリケーションは単純なゲームです。このトピックの手順を完了すると、正方形のグラフィック オブジェクトを画面内で移動させるアプリケーションを構築できます。このシリーズの以降のトピックでは、この基本的なインフラストラクチャを拡張して、衝突の検出機能の追加、ゲームへのレベルの追加、および現在の得点とレベルを示すスコアボードの追加を行います。このゲームが完全に整ったら、試用エクスペリエンスを追加します。

注注:

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

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

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

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

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

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

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

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

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

    GetStartedSelectPlatformXNA
  6. [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

この手順では、グラフィック オブジェクトを画面内で移動させるコードを追加します。次のコードは以下の処理を行います。

  • 変数の追加。

  • LoadContent メソッドへのグラフィック オブジェクトの読み込み。

  • Draw ループ内での画面へのグラフィック オブジェクトの描画。

  • Update ループ内でのグラフィック オブジェクトの位置の更新。

基本的なゲーム ロジックを追加するには

  1. Game1.cs 内の Game1 クラスのコードを次のコードに置き換えます。これは、スプライト オブジェクトを画面内で移動させる基本的なゲーム ロジックです。

    
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
    
            Texture2D texture;
            Vector2 spritePosition;
            Vector2 spriteSpeed;
            int sprite1Height;
            int sprite1Width;
    
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                graphics.PreferredBackBufferWidth = 800;
                graphics.PreferredBackBufferHeight = 480;
                graphics.IsFullScreen = true;
                graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;
    
                Content.RootDirectory = "Content";
    
                // Frame rate is 30 fps by default for Windows Phone.
                TargetElapsedTime = TimeSpan.FromMilliseconds(33.3333);
    
            }
    
            /// <summary>
            /// Allows the game to perform any initialization it needs to before starting to run.
            /// This is where it can query for any required services and load any non-graphic
            /// related content.  Calling base.Initialize will enumerate through any components
            /// and initialize them as well.
            /// </summary>
            protected override void Initialize()
            {
                spriteSpeed = new Vector2(50.0f, 50.0f);
                base.Initialize();
            }
    
            /// <summary>
            /// LoadContent will be called once per game and is the place to load
            /// all of your content.
            /// </summary>
            protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                texture = Content.Load<Texture2D>("PhoneGameThumb");
    
                spritePosition.X = 0;
                spritePosition.Y = 0;
    
                sprite1Height = texture.Bounds.Height;
                sprite1Width = texture.Bounds.Width;
    
            }
    
            /// <summary>
            /// UnloadContent will be called once per game and is the place to unload
            /// all content.
            /// </summary>
            protected override void UnloadContent()
            {
                // TODO: Unload any non ContentManager content here
            }
    
            /// <summary>
            /// Allows the game to run logic such as updating the world,
            /// checking for collisions, gathering input, and playing audio.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            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 spritePosition, ref spriteSpeed);
                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 - texture.Width;
                int MinX = 0;
                int MaxY =
                    graphics.GraphicsDevice.Viewport.Height - texture.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;
                }
    
            }
    
            /// <summary>
            /// This is called when the game should draw itself.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // Draw the sprite.
                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
                
                spriteBatch.Draw(texture, spritePosition, Color.White);
                spriteBatch.End();  
              
                // Call the Draw method on the scoreBoard object to update the scoreboard.
                base.Draw(gameTime);
    
            }
    
        }
    
    
  2. [ビルド]、[ソリューションのビルド] の順にメニュー コマンドを選択してソリューションをビルドします。プロジェクトはエラーを出すことなくビルドされるはずです。[エラー一覧] ウィンドウをまだ開いていない場合は、[表示]、[エラー一覧] の順にメニュー コマンドを選択して開きます。エラーがある場合、前述の手順を確認してエラーしを修正し、ソリューションをもう一度ビルドします。

  3. 標準のツール バーで、アプリケーションの展開対象を [Windows Phone Emulator] に設定します。

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

  4. [デバッグ]、[デバッグ開始] の順にメニュー コマンドを選択してアプリケーションを実行します。これによってエミュレーター ウィンドウが開き、アプリケーションが起動します。グラフィックが画面内を飛び跳ねているのが表示されます。

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

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

  7. デバッグを停止するには、[デバッグ] メニューの [デバッグの停止] を選択します。

これで、XNA Framework アプリケーションの基本的な機能が定義されました。このゲームは、画面内をバウンドする正方形のグラフィック オブジェクトで構成されています。このシリーズの以降のトピックでは、ゲームの機能を拡張します。このゲーム プレイでは、正方形が画面内を移動する際にユーザーがタップし、得点を得るたびにヒット (衝突) が記録されていきます。画面でグラフィックをユーザーがタップしたことを検出する機能については、次のセクションで説明します。ユーザーがオブジェクトをタップしたことを検出する機能に加えて、ユーザーの現在の得点を表示するスコアボード、および複数のレベルのゲームをプレイするメカニズムを作成します。このインフラストラクチャが整ったら、試用モードを実装して、ゲームの現在のライセンスを検出し、ゲームが試用モードの場合にユーザーがレベル 1 のみをプレイできるようにします。

このシリーズの次のトピックでは、アプリケーションに衝突の検出機能を追加する方法を示します。これにより、このアプリケーションのゲーム プレイの原型が形成されます。画面で移動するオブジェクトをユーザーがタップするたびにヒット (衝突) 数が増加し、ゲームの得点として記録されます。

方法: XNA Framework アプリケーションに競合検出機能を追加する

表示:
© 2015 Microsoft