2016-04-11 8 views
0

私はXNAゲーム(4.0、Visual Studio 2015、.NET 4.0 Framework)を手に入れようとしています。ノートパソコンで動作するように1台のコンピュータで書きましたが、パフォーマンスは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文の最後です。方法は次のとおりです。もちろん、方法およびスイッチ文を終えた後

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

     spriteBatch.Begin(); 

     switch(state) 
     { 
      case GameState.preTitleScreen: 

       break; 

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

そしてここでは、drawメソッドで描画されているものです。

何が問題なのか、誰か提案がありますか?

答えて

1

十分なコードが提示されていないため、私は何が問題なのかを推測する必要があります。
私が知る限り、スイッチの状態はあなたのゲームをあまりにも遅くすべきではありません。問題は、リアルタイムの配慮なしにすべての「更新」を更新することです。私がそれを意味するもの:
あなたはプレイヤーを持っていると言います。更新メソッドでは、右(Vector2)の位置を1で更新します。だから、それは次のようになります:

 

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

、お使いのプロセッサはあなたのゲームを更新するために取得するたびに、それはあなたのプレイヤーの位置のXに1を追加することを意味しています。だから、プロセッサーが遅い場合はどうすればいいですか?数式中の1は5と言われ、それは「あなたのPC上で」よく見えるでしょう。しかし、あなたは別のPCにゲームを持って行き、それはあまりにも速く動きます。なぜなら、他のPCはよりパワフルなプロセッサを持っていて、ゲームをより頻繁に更新するからです。また、バックグラウンド処理の開始と終了が頻繁に行われると、fpsが低下または増加します。 これは私が疑問に思っているものです。
この問題の解決方法は簡単です。あなたは、最後の更新からどれくらいの時間が経過したかを示す何かを呼び出します。あなたのコードは今のようになり、プレイヤーはすべてのPCで同じ金額を右に移動します。 ASD
毎秒をこのように移動する方法を多くのピクセル提示し、すべてのプロセッサが作成する移動量と経過時間を乗算し、その正確な量を作成します

 

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

あなたは、すべてのプロセッサ上でしたい。
サウンドに関しては、遅いコンピュータではかなりずっと遅くなるでしょう。