【问题标题】:Why is my XNA game lagging?为什么我的 XNA 游戏卡顿了?
【发布时间】:2013-06-19 01:46:48
【问题描述】:

在我们保存它以尝试将其提交给我们的编程课程之前,该代码运行良好。我们相信我们有某种内存泄漏,但无法发现它。在保存之前和保存一切正常之前,我们没有对代码进行任何更改,所以当我们保存它时出现了问题。以下是我们更新方法中的所有代码。对于更新方法中的每个困难,我们都有一个案例,我们认为这就是问题所在。

//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;

【问题讨论】:

  • 请将代码缩短到仅相关部分...
  • 我不知道内存泄漏在哪里。我认为这是其中一种情况。我们编辑了主帖,只包含一个案例
  • “保存”是什么意思?
  • 这是一个很长的案例。
  • @DB 这可能是因为您在每次更新滴答声时不断在 MediaPlayer 中排队歌曲:MediaPlayer.Play(BackgroundMusic);

标签: c# xna


【解决方案1】:

您似乎在每次更新时都在 MediaPlayer 中不断地排队播放歌曲:

你需要把它移到你的 update() 方法之外

MediaPlayer.Play(BackgroundMusic);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多