C # XNA - любой способ обновить игровые состояния?

Поэтому я использую enum для состояний игры. Когда я нахожусь в состоянии game playing, я могу сделать паузу и вернуться в состояние main menu. Но если я нажму Play game и снова перейду к game playing, все будет так, как я оставил. Я ищу способ как-то «перезапустить/обновить/сбросить» состояние game playing. Так что, если я вернусь к этому, мне придется начать все сначала.


person PowerUser    schedule 17.10.2014    source источник
comment
похоже, вам нужно реализовать функциональность «Перезапустить/Продолжить/» и т. д., поэтому, если у вас есть что-то, что вы хотите или вам нужно добавить в отношении enum, добавьте это.. также покажите некоторый код, чтобы мы могли видеть, как выглядит ваше перечисление.   -  person MethodMan    schedule 17.10.2014
comment
Просто пришло в голову: как насчет возможного добавления состояния NewGame, которое переключалось бы на Playing после завершения инициализации/настройки?   -  person Scott    schedule 17.10.2014


Ответы (2)


Теперь у вас есть некоторый код (предположительно), который инициализирует ваше игровое состояние при запуске программы. Вам нужно выделить этот код (при необходимости), чтобы его также можно было вызывать для инициализации состояния игры в любое время. Например, когда вы начинаете новую игру, т. е. переводите свое игровое состояние в «игру».

Действительно, большую часть кода инициализации (то есть все, кроме того, что не нужно повторно инициализировать в новой игре), вы, вероятно, захотите запустить только тогда. Запуск его при запуске программы, а затем снова позже является излишним и только замедляет время загрузки.

person Peter Duniho    schedule 17.10.2014
comment
Вы имеете в виду, что я должен поставить его в Initialize()? - person PowerUser; 17.10.2014
comment
Я не знаю. Я не работаю с XNA, поэтому не знаю, что такое Initialize() и когда она вызывается. Но, предполагая, что это метод, который XNA вызывает автоматически, когда вы переключаетесь в состояние игры из состояния главного меню, да... это звучит как хорошее место для инициализации. :) - person Peter Duniho; 18.10.2014
comment
Ответ Питера необходимо учитывать этот код в целом правильный, но не помещайте его в Инициализировать . Причина в том, что Game.Initialize() в XNA вызывается только один раз и то во время запуска. См. ссылку выше для более подробной информации. Вам потребуется создать новый метод и вызвать его из Game.Update при необходимости - person MickyD; 18.10.2014

В моем игровом классе есть такие списки, как «Враги», «Взрывы», «Пули»… а внутри класса Gampleay у меня есть подпрограмма Init, которая выполняется, когда состояние изменяется на «игровой процесс». Он очищает все и загружает уровень.

в псевдокоде выглядит так:

Class GamePlay
    Sub Init
       Enemies.Clear()
       Explosions.Clear()
       Bullets.Clear()
       Paralax.Clear()
       Stars.Clear()
       LoadLevel(lvl)
    End Sub

    Sub LoadLevel(lvl)
       Stars.Geneate(200)
       Paralax.Add(new Paralax(type, position, velocity))
    End Sub

    Sub Update
        if (mainship.fire) bullets.fire()
    End Sub

    Sub Draw
    End Sub
End Class
person Davor Mlinaric    schedule 18.10.2014
comment
Хотя это хороший ответ для первоначального запуска игры, он не отвечает желанию ОП о том, как перезапустить/обновить/сбросить через state machine - person MickyD; 18.10.2014