Это скорее проблема архитектуры, чем проблема кода. Лично я создаю reset()
функцию для всех пользовательских классов. Внутри этой функции я делаю все необходимое, чтобы установить объект в состояние по умолчанию; установить положение, альфа, видимый, пользовательский реквизит и т. д.
Что касается того, когда это назвать, то это действительно зависит от вас, но хорошим шаблоном дизайна для вас будет шаблон проектирования штата.
По сути, в вашей игре есть StateManager
, которая удерживает и контролирует различные State
объекты. Эти State
объекты могут представлять различные состояния вашей игры; MainMenu
, Play
, GameOver
, Reset
и т. Д.
Каждый State
будет иметь begin()
, end()
и, возможно, update()
. Когда ваш StateManager
переключает состояния, он будет вызывать end()
при State
уходе и start()
при State
входе. Вы можете быть только в одном State
одновременно, так что это позволяет вам легко инкапсулируйте свою логику в зависимости от того, где вы находитесь в игре.
Внутри функции begin()
вы настраиваете все, что вам нужно для этого конкретного состояния. Например, функция begin()
для вашего состояния Play
может добавить всех слушателей событий клавиатуры / мыши, которые вам нужны для управления игрой. Внутри функции end()
вы очищаете все, что настроили. В функции end()
для вашего состояния Play
вы, например, удалили бы все прослушиватели событий клавиатуры / мыши. Это означало бы, что игрок не может выполнять какую-либо игровую логику, если он не находится в состоянии Play
. Если в вашем State
была функция update()
(которая называется каждым кадром), то в примере Play
вы можете проверить, не осталось ли у игрока больше жизней, или достиг ли счет на следующем уровне. .
Для логики сброса в вашем состоянии Reset
вы можете вызвать функцию reset()
для всех ваших объектов или установить их вручную. Путь через вашу игру с состояниями будет выглядеть так:
MainMenu
(воспроизведение) -> Reset
(или состояние Init
) -> Play
-> GameOver
(воспроизведение) -> Reset
-> Play
Нет встроенной логики для сброса объекта, вам нужно позаботиться об этом самостоятельно. Принятие такого шаблона может помочь с этим.