Инкапсуляция стейтов в State Pattern.

Программирование на Юнити.

Инкапсуляция стейтов в State Pattern.

Сообщение GospelOfMyHeart 14 июн 2019, 17:38

Здравствуйте, возникла проблема. Никак не могу сообразить, как лучше всего скрыть от кода стейты. Как бы, мне надо хранить 3 состояния, что бы по надобности их вытягивать. Пришел к использованию static. Но статик так просто не инициализировать извне. Возможно стоит использовать какой-то еще класс, для того, что бы хранить классы состояния, что бы не пересоздавать их каждый раз?
Синтаксис:
Используется csharp
public class BaseState
{
    static BaseState idle;
    static BaseState running;
    static BaseState inAirState;

    public static BaseState IdleState
    {
        get
        {
            if (idle == null)
            {
                idle = new CharacterIdleState();
            }
            return idle;
        }
        set
        {
            idle = value;
        }

    }
    public static BaseState RunningState
    {
        get
        {
            if (running == null)
            {
                running = new CharacterRunningState();
            }
            return running;
        }
        set
        {
            running = value;
        }
    }
    public static BaseState InAirState
    {
        get
        {
            if(inAirState == null)
            {
                inAirState = new CharacterRunningState();
            }
            return inAirState;
        }
        set
        {
            running = value;
        }
    }
}
GospelOfMyHeart
UNец
 
Сообщения: 10
Зарегистрирован: 12 май 2019, 22:35

Re: Инкапсуляция стейтов в State Pattern.

Сообщение AngryCat 14 июн 2019, 17:54

Какая задача этих стейтов?
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Инкапсуляция стейтов в State Pattern.

Сообщение GospelOfMyHeart 14 июн 2019, 18:21

AngryCat писал(а):Какая задача этих стейтов?

Типичная. Передвижение персонажа, в зависимости от его состояния. Просто, что бы не создавать каждый раз новый стейт, хочу хранить их где-то. Но в переспективе, у каждого подкласа будет свой конструктор со своими параметрами
GospelOfMyHeart
UNец
 
Сообщения: 10
Зарегистрирован: 12 май 2019, 22:35

Re: Инкапсуляция стейтов в State Pattern.

Сообщение 1max1 14 июн 2019, 18:42

Но статик так просто не инициализировать извне.

Подробней. Почему не получается сделать просто:
Синтаксис:
Используется csharp
public static BaseState idle = new CharacterIdleState();

???
Последний раз редактировалось 1max1 14 июн 2019, 19:37, всего редактировалось 2 раз(а).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Инкапсуляция стейтов в State Pattern.

Сообщение seaman 14 июн 2019, 19:11

Если они не меняются рантайм - может в ScriptableObject? Как тут:
https://unity3d.com/ru/learn/tutorials/ ... te-pattern
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Инкапсуляция стейтов в State Pattern.

Сообщение ~AvA~ 14 июн 2019, 19:52

GospelOfMyHeart писал(а): Никак не могу сообразить, как лучше всего скрыть от кода стейты. Как бы, мне надо хранить 3 состояния, что бы по надобности их вытягивать. Пришел к использованию static.

Я почти всегда использую один и тот же способ реализации этого паттерна.
Есть тут, куски кода, там мало ещё состояний, надеюсь поятно.
Идея ролика была не в том, чтобы стримить код.. но выхватить и написать так же как там - вполне монжо, если не получится - я могу сделать проект и прислать, но мне не охота. Так что надеюсь, вытащишь из видосика :-)
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: Инкапсуляция стейтов в State Pattern.

Сообщение GospelOfMyHeart 19 июн 2019, 14:24

1max1 писал(а):
Но статик так просто не инициализировать извне.

Подробней. Почему не получается сделать просто:
Синтаксис:
Используется csharp
public static BaseState idle = new CharacterIdleState();

???

Хотел бы как раз поменьше скрыть возможных обращений к этим свойства, это первое, второе, это то, что конструкторы подстейтов будет параметризированы и хотел я их создавать в контексте. Но видимо я слишком заморачиваюсь. Решил, что просто через паблик статик сделаю.
GospelOfMyHeart
UNец
 
Сообщения: 10
Зарегистрирован: 12 май 2019, 22:35


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13