为什么我的XNA游戏会滞后?

时间:2013-06-18 17:07:47

标签: c# xna

在我们保存代码之前,代码工作得非常漂亮,并尝试将其提交给我们的编程课程。我们认为我们有某种内存泄漏,但无法发现它。在保存之前我们没有对代码进行任何更改,在保存之前一切都很好,所以当我们保存它时出错了。下面是我们更新方法中的所有代码。我们在更新方法中遇到了每个难题的情况,这是我们认为问题所在。

//Easy game mode
        case GameState.Easy:
            //starts backgound music
            MediaPlayer.Play(BackgroundMusic);
            this.IsMouseVisible = false;
            PlayerTwoSpeed = 5;

            if (HitCount == PointsToWin) PlayerOneWins();
            if (HitCountEnemy == PointsToWin) PlayerTwoWins();

            //getting the keyboard state, so input can be detected
            if (Keyboard.GetState().IsKeyDown(Keys.Down))
            {
                if (POPBox.Y >= 373)
                {
                    POPBox.Y += 0;
                }
                else
                {
                    POPBox.Y += PlayersSpeed;
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                if (POPBox.Y <= 0)
                {
                    POPBox.Y += 0;
                }
                else
                {
                    POPBox.Y += -PlayersSpeed;
                }
            }
            // Ball limits

            if (BallBox.Y <= 0)
                VelocityY *= -1;
            if (BallBox.Y >= 463)
                VelocityY *= -1;

            //Collision Detection (Runs this code if it hits the player one's paddle)
            if (BallBox.Intersects(POPBox))
            {
                //Used to deflect in different directions for some veriety
                if (PlayersSpeed > 0)
                    VelocityY += 3;
                if (PlayersSpeed < 0)
                    VelocityY -= 3;
                VelocityX *= -1;
                ShockerGenerator();

                //Stopping the no slope bug. If it wants to bounce perfectly straight, it is slightly shifty to fix that error.

                if (VelocityY == 0)
                    VelocityY = VelocityY += 3;
                if (VelocityX == 0)
                    VelocityX = VelocityX += 3;

                //speed control

                if (VelocityX > 10)
                    VelocityX = 10;
                if (VelocityY > 10)
                    VelocityY = 10;
            }
            // Runs this code if the ball hits player two's paddle
            if (BallBox.Intersects(PTPBox))
            {
                VelocityX *= -1;
                if (VelocityY == 0)
                    VelocityY = VelocityY += 3;
                if (VelocityX == 0)
                    VelocityX = VelocityX += 3;
            }


            //Object a collision

            if (BallBox.Intersects(ShocObjectARectangle))
            {
                VelocityY *= -1;
            }
            if (BallBox.Intersects(ShocObjectBRectangle))
            {
                VelocityX *= -1;
            }


            // If Player One Loses

            if (BallBox.X >= 790)
            {
                PlayerOneLoses();
            }


            if (BallBox.X <= 0)
            {
                PlayerTwoLoses();

            }



            //Player Two's "AI" and limits

            if ((PTPBox.Y + 50) > BallBox.Y)
                PTPBox.Y += -PlayerTwoSpeed;
            if ((PTPBox.Y + 50) < BallBox.Y)
                PTPBox.Y += PlayerTwoSpeed;



            //Object A movement code

            ShocObjectARectangle.X += ObjectASpeed;
            if (ShocObjectARectangle.X <= 80)
                ObjectASpeed *= -1;
            else if (ShocObjectARectangle.X >= 600)
                ObjectASpeed *= -1;


            //Object B movement code

            ShocObjectBRectangle.Y += ObjectBSpeed;
            if (ShocObjectBRectangle.Y <= 0)
                ObjectBSpeed *= -1;
            else if (ShocObjectBRectangle.Y >= 415)
                ObjectBSpeed *= -1;


            // Ball Velocity

            BallBox.Y += -VelocityY;
            BallBox.X += VelocityX;
            break;

1 个答案:

答案 0 :(得分:4)

在每次更新时,您似乎都在不断排队MediaPlayer中的歌曲:

您需要将其移到update()方法之外

MediaPlayer.Play(BackgroundMusic);