2016-04-11 82 views
0

我試圖獲得一款XNA遊戲(4.0,Visual Studio 2015,.NET 4.0 Framework),我在一臺計算機上編寫了我的筆記本電腦,但性能在某些部分下降到2,然後回到60其他人(我的意思是在我列舉的某些不同的GameStates中)。要清楚的是,我寫的計算機完美工作,並保持在60 fps的恆定速度,但另一臺計算機卻非常糟糕。爲什麼我的XNA遊戲在另一臺計算機上變慢?

內存/ CPU使用率小於它們兩者的25%,所以我不認爲它與代碼有關,不過這裏是在Update方法部分運行的只是一個空白屏幕的內容:

private void switchGameMode() 
    { 
     switch (state) 
     { 
      case GameState.preTitleScreen: 
       if (playing != paganBackground) 
       { 
        MediaPlayer.Stop(); 
        playing = paganBackground; 
       } 
       MediaPlayer.Stop(); 
       surprisePreTitleScreen(); 
       break; 

其餘的是switch語句的結尾。其方法是:

private void surprisePreTitleScreen() 
    { 
     if ((oldpad1.Buttons.Start == ButtonState.Released && pad1.Buttons.Start == ButtonState.Pressed) || (oldkeys.IsKeyUp(Keys.Enter) && keys.IsKeyDown(Keys.Enter))) 
     { 
      jeopardyTitle.Play(); 
      state = GameState.titleScreen; 
     } 
    } 

而且這裏是正在繪製的繪製方法:

protected override void Draw(GameTime gameTime) 
    { 
     GraphicsDevice.Clear(Color.Wheat); 

     spriteBatch.Begin(); 

     switch(state) 
     { 
      case GameState.preTitleScreen: 

       break; 

整理過程中的方法和switch語句之後。

有沒有人有什麼不對的建議?

回答

1

由於沒有提供足夠的代碼,我必須假定有什麼問題。
據我所知,switch statemenst不應該太慢你的遊戲。可能出現的問題是,您在沒有實時考慮的情況下更新每個「更新」。我的意思是:
可以說你有一個球員。在更新方法中,您在右側更新他的位置(Vector2)1。因此,它會是這個樣子:

 

    protected override void Update (GameTime gameTime) 
    { 
     palyer1.Position.X += 1; 
    } 

現在,這意味着每一個你的處理器得到更新您的遊戲時間,這將增加1到您的播放器的位置的X。那麼,如果你有一個緩慢的處理器呢?公式中的1表示5,而且在PC上看起來不錯。但是,你將遊戲帶到另一臺PC上,並且速度過快,因爲另一臺PC具有更強大的處理器,並且它會更頻繁地更新遊戲。另外,如果後臺進程經常開始和結束,則fps將下降或增加。 這是我所假設的問題。
解決這個問題很簡單。你打電話告訴你從上次更新開始有多少實際時間。您的代碼現在看起來像這樣,您的播放器將在每臺PC上向右移動相同的數量。

 

    protected override void Update (GameTime gameTime) 
    { 
     elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds; 
     palyer1.Position.X += elapsedTime * ASD; 
    } 

ASD給出多少像素移動每秒
這樣一來,每一個處理器將乘以要創建的移動量經過的時間,並將創建的確切量你想在每個處理器上。
至於聲音,在慢速計算機上它幾乎總是滯後。

相關問題