为什么我的XNA游戏在另一台计算机上运行缓慢?

时间:2016-04-11 19:57:07

标签: c# visual-studio xna xna-4.0 frame-rate

我正在尝试使用一台计算机上的XNA游戏(4.0,Visual Studio 2015,.NET 4.0 Framework)在我的笔记本电脑上工作,但某些部分的性能下降到2,然后又回到60在其他人(我的意思是在我列举的某些不同的GameStates)。为了清楚起见,我编写的计算机完美运行并保持恒定的60 fps,而另一台计算机则非常滞后。

内存/ CPU的使用率不到它们两者的25%,所以我不认为它与代码有关,不过这里是在只运行空白屏幕的Update方法部分调用的内容: / p>

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;

完成方法并切换语句后当然。

有没有人对错误提出建议?

1 个答案:

答案 0 :(得分:1)

由于没有提供足够的代码,我必须假设有问题 据我所知,切换状态不应该太慢你的游戏。可能的问题是您在没有实时考虑的情况下更新每个“更新”。我的意思是:
假设你有一名球员。在更新方法中,您在右侧更新他的poition(Vector2)1。所以,它看起来像这样:


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

现在,这意味着每次处理器更新游戏时,它都会在玩家位置的X上加1。那么,如果你的处理器速度慢,该怎么办?公式中的1将是5,这将在您的PC上看起来很好。但是,你将游戏带到另一台PC,它移动得太快,因为另一台PC拥有更强大的处理器,它可以更频繁地更新你的游戏。此外,如果后台处理经常开始和结束,fps将下降或增加。 这是我认为有问题的。
这个问题的解决方案很简单。你打电话告诉你上次更新过去了多少实时。您的代码现在看起来像这样,并且您的播放器将在每台PC上向右移动相同的数量。


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

其中 ASD 表示每秒移动的像素数 这样,每个处理器都会将经过的时间与您想要创建的移动量相乘,并在每个处理器上创建所需的确切数量。
至于声音,它在慢速计算机上几乎总是滞后。