Я думаю, вам нужно немного больше отделить свою логику. Как уже упоминалось в предыдущем ответе, распространенный способ сделать это - иметь возможность управлять своими игровыми состояниями.
Т.е. SpashScreenState, InGameState, MenuState, GameOverState
Каждое из этих состояний реализует IGameState или что-то, затем просто поместите их все в некоторый GameStateManager или что-то, чтобы вы могли переключаться между состояниями в любой момент времени, и только это активное состояние будет обновлено.
Может быть немного сложно, если у вас есть прозрачные меню или вы хотите, чтобы игра продолжалась в фоновом режиме без отображения игры, но я считаю, что на сайте XNA есть некоторые учебники по обработке состояния таким образом ...
Самый простой способ заставить его работать - это что-то вроде ниже:
public enum GameState
{
Unknown = 0,
SplashScreen,
InGame,
Menu,
GameOver
}
public interface IGameState
{
void Init();
void Update(GameTime elapsedTime);
void Render(GameTime elapsedTime);
void Destroy();
}
Затем создайте словарь, в котором хранятся все ваши игровые состояния, затем в главном разделе XNA есть переменная для хранения текущего игрового состояния, а затем просто перенаправьте все ваши вызовы обновления / рендеринга на соответствующее значение в словаре.
Это ДЕЙСТВИТЕЛЬНО примитивный способ сделать это, но он должен показать вам общую идею разделения его на различные игровые состояния. Таким образом, одновременно может быть активным только одно игровое состояние, то есть, если вы перейдете в меню, а затем вернетесь к игре, вы возобновите игру именно там, где остановились.