C # XNA всегда IsRunningSlowly - PullRequest
       28

C # XNA всегда IsRunningSlowly

1 голос
/ 12 февраля 2012
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;

namespace proj
{
    public class game : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        public static SpriteBatch sprite_batch;
        public static Texture2D texture;

        public game()
        {
            graphics = new GraphicsDeviceManager(this);
        }

        protected override void Initialize()
        {
            graphics.PreferredBackBufferWidth = 300;
            graphics.PreferredBackBufferHeight = 300;
            graphics.ApplyChanges();
            Content.RootDirectory = "Content";
            sprite_batch = new SpriteBatch(GraphicsDevice);
            texture = Content.Load<Texture2D>("a"); // 1 x 1, white
            base.Initialize();
        }

        protected override void Update(GameTime game_time)
        {
            base.Update(game_time);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);
            sprite_batch.Begin();
            if (gameTime.IsRunningSlowly)
            {
                sprite_batch.Draw(texture,
                    new Rectangle(50, 50, 200, 200), Color.OrangeRed);
            }
            sprite_batch.End();
            base.Draw(gameTime);
        }
    }
}

Для меня оранжевый квадрат виден почти все время, однако почти ничего не происходит.

60 Ничего не обновляется и 60 ничего не рисует, делая 120 почти пустых вызовов функций, которые должны произойти, иу них есть целая секунда, чтобы программа не работала медленно, но gameTime.IsRunningSlowly возвращает True почти все время.

Я уверен, что мой компьютер достаточно быстр для работыэто лучше, что происходит?Мне нужно иметь возможность использовать gameTime.IsRunningSlowly, я не могу, если он не работает должным образом.

Ответы [ 3 ]

1 голос
/ 12 февраля 2012

Ничего не делать.Проблема волшебным образом прояснится сама собой!

Серьезно, IsRunningSlowly не должен лгать вам.В базовом игровом проекте он никогда не должен возвращать True, если только не хватает системных ресурсов.Если он все время возвращает True, то я бы посоветовал взглянуть и посмотреть, какие запущены другие процессы.

IsRunningSlowly - это одна из функций платформы XNA, которая была там с самого начала, и хотя у вас есть потенциальные возможностиЯ обнаружил какой-то крайний случай, из-за которого возникла странная ошибка, из-за которой он неправильно сообщал, что маловероятно.

Я бы порекомендовал перезагрузить компьютер, а затем повторить попытку.Если проблема не устраняется, вам нужно будет при запуске запустить изучение того, какие другие процессы используют системные ресурсы, или оценки текущей настройки оборудования (и вам не нужно много для пустого игрового проекта, работающего со скоростью 60 FPS,по умолчанию XNA)

1 голос
/ 12 февраля 2012

Добавьте эту строку в конструктор game (). Это должно как можно чаще обновлять игровые вызовы.

                 this.IsFixedTimeStep = false;
0 голосов
/ 20 августа 2012

У меня точно такая же проблема. Игра работает медленно, но практически не использует ресурсы компьютера Я заметил в своем коде, что меня затягивает запуск игры. Это будет отставать на секунду и остаться там. Это очень трудно отладить, потому что что-то вроде точки останова запускает игру, медленно запускающуюся в поле.

Я в конечном итоге выследил проблему, используя внешний таймер и сравнив его с таймером в игре. У меня были результаты, как

в игре / реальном времени 1/2 5/6 10/11

так что игра потеряла секунду на старте, но затем запустилась нормально.

Скорее всего, существует правильный способ запуска игры и загрузки ресурсов, который бы избежал этой проблемы

...