Я думал о реализации enum, который определяет состояние игрового объекта, и я хотел знать, смогу ли я напрямую использовать флаги в определении enum вместо определения состояния объекта как набора флагов без простого,предварительно определенное глобальное имя для состояний, используемых в автомате состояний.
Например, скажем, есть 5 состояний: PreActivation (создано, но не запущено; т.е. враг в будущей волне), Active (в настоящее время)используется (т. е. враг на экране атакует вас), приостановлен (больше не активен, но может реактивироваться; т. е. противник, если игрок использует замедляющую силу), деактивирован (объект, использование которого завершено, но все еще находится вигровой мир, т.е. враг, чье тело осталось после смерти, как в Doom 1 & 2), и ToRemove (объект, который планируется удалить из игры; т. е. враг после того, как вы очистите уровень и перейдете на следующий).
Что я хочу сделать, так это определить enum, чтобы в состояниях были все применимые флаги;например, Деактивированный враг: 1. Ранее был активирован, 2. В настоящее время не активен.Мое текущее мышление делает что-то вроде этого:
public enum ObjectState
{
// The first section are the flags
BeenActivated = 0b0000001, // Previously activated
CurrentlyActive = 0b0000010, // Currently activated
IsSuspended = 0b0000100, // It may be reactivated
ShouldRemove = 0b0001000, // It should be removed
// These are the states
PreActivation = 0b0000100, // Mot currently active, nor has it ever been active, but it will get activated
Active = 0b0000011, // Currently active, and it's been active
Paused = 0b0000101, // Not currently active, but it's been active before
DeActivated = 0b0000001, // Not currently active, but it's been active before, and it shouldn't get reactivated, but don't remove yet
ToRemove = 0b0001001 // Not currently active, but it's been active before, and it shouldn't get reactivated, it should be removed
}
Насколько я знаю, это должно работать правильно, но у меня есть несколько основных проблем:
- Есть ли проблемывероятно, это произойдет?
- Это плохая практика?
- Это плохая практика?И, если это так;
- A.Что с ним не так?
- B.Что я должен сделать вместо этого?Я бы просто сделал состояние объекта коллекцией этих флагов, но я бы хотел кратко перечислить для конкретных состояний, так как это учитывает сложность для конкретных случаев и простоту, когда это необходимо.Есть ли более приемлемый способ добиться этого?
Извините, если это повторение, или я нарушил какое-то другое правило, но я только что создал учетную запись сегодня;это мой 1-й пост.Кроме того, я не уверен, как бы вы назвали это при поиске, и я не получил подобных совпадений здесь или в Google.