2013-06-18 100 views
0

在我们保存代码之前,代码运行得非常好,并尝试将其提交给我们的编程课程。我们相信我们有某种内存泄漏,但无法发现它。我们在保存代码之前以及保存完好之前没有对代码进行任何更改,所以当我们保存它时出现了问题。以下是我们的更新方法中的所有代码。我们有更新方法中每个困难的情况,这是我们认为问题所在的地方。为什么我的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; 
+0

缩短下来的代码只有相关的部分请... – lifetimes

+0

我不知道内存泄漏将在哪里。我认为这是其中一种情况。我们编辑了主要帖子,仅包含一个案例 –

+0

您是指“保存”它是什么意思? –

回答

4

您似乎在不断地在每次更新蜱排队的歌曲在您的MediaPlayer:

你会想要将这个您的更新之外()方法

MediaPlayer.Play(BackgroundMusic);