0

作成している XNA 2D ゲームを持っていますが、問題が発生しています。

スプライトが飛び越えている画面を横切ってスクロールするボックスがあります。スプライトは 2D カメラで追跡されています。カメラが問題を引き起こしているのではないかと心配しています。これは、スクロール ボックスが継続せずに画面の途中で停止し、ライフの数が 1 つのライフではなく急速に減少しているためです。衝突が1回発生したとき。

これは、スプライトが移動ボックスと衝突するコードです

    Rectangle fairyRectangle = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);

        hit = false;

        for (int i = 0; i < GameConstants.TotalBoxes; i++)
        {
            if (scrollingBlocks.boxArray[i].alive)
            {
                Rectangle blockRectangle = new Rectangle((int)scrollingBlocks.boxArray[i].position.X, (int)scrollingBlocks.boxArray[i].position.Y, scrollingBlocks.boxArray[i].texture.Width, scrollingBlocks.boxArray[i].texture.Height);

                if (IntersectPixels(fairyRectangle, fairyTextureData, blockRectangle, blockTextureData))
                {
                    scrollingBlocks.boxArray[i].alive = false;



                    hit = true;
                    lives--;

                    scrollingBlocks.boxArray[i].alive = true;

                    scrollingBlocks.boxArray[i].position.X = random.Next(GameConstants.ScreenWidth);
                    scrollingBlocks.boxArray[i].position.Y = 570;
                }
            }

        }

そして、これはスクロール ボックスの更新関数です public void Update(GameTime gameTime) {

        for (int i = 0; i < GameConstants.TotalBoxes; i++)
        {
            boxArray[i].position.X = boxArray[i].position.X - 5;
            boxArray[i].position.Y = boxArray[i].position.Y;

            if (boxArray[i].position.X < 0)
            {
                boxArray[i].position.X = randomno.Next(GameConstants.ScreenWidth) + 700;
                boxArray[i].position.Y = 570;
            }

            Helper.WrapScreenPosition(ref boxArray[i].position);
        }



    }

右側の画面から始めて x = 0 まで移動したいのですが、現在 x = 400 で途中で止まっています。

そして最後に、スプライトとブロックを使ってすべてを描いています。

    if (gameState == GameState.PLAYINGLEVEL3)
        {
            graphics.GraphicsDevice.Clear(Color.Aquamarine);
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
            backgroundManager.Draw(spriteBatch);
            //scrollingBlocks.Draw(spriteBatch);
            spriteBatch.DrawString(lucidaConsole, "Score: " + score + " Level: " + level + " Time Remaining: " + ((int)timer / 1000).ToString() + " Lives Remaining: " + lives, scorePosition, Color.DarkOrchid);
            spriteBatch.End();


            spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.None, camera.transform);
            scrollingBlocks.Draw(spriteBatch);
            fairyL3.Draw(spriteBatch);
            spriteBatch.End();
        }

助けてくれてありがとう!

4

1 に答える 1

0

提供されたコードから、カメラがどのように機能するかについてはあまりわかりませんが、レベルを開始すると、カメラが新しい中心点 (元の xna 画面の場所ではなく) を選択すると思います。

つまり、カメラの中心がカメラを少し押し戻した可能性があるため、画面の位置 0 と思われるものが画面の中央まで押し出され、ボックスが停止した可能性があります。これらのカメラのチュートリアルを見ることをお勧めします http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/またはhttp://www.youtube.com/ watch?v=pin8_ZfBgq0

カメラは扱いにくい場合があるため、いくつかのチュートリアルを参照して、ハングアウト マトリックスとビュー ポートを取得することをお勧めします。

複数のライフを奪うのは、「このボックスが自分のプレイヤーにぶつかったら、ライフを奪う」というあなたの言葉によるものです。コンピューターは、命を奪っているプレイヤーと衝突している限り、1つだけ奪われたいことを認識していないため、減り続けます。

うまくいけば、これはあなたにいくつかのアイデアを与えるでしょう:D

于 2013-06-13T21:32:28.833 に答える