A-tit indd


Состояние (State) —  Паттерны программирования игр



Download 3,35 Mb.
Pdf ko'rish
bet96/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   92   93   94   95   96   97   98   99   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

128
Состояние (State) — 
Паттерны программирования игр
Делегирование состоянию
Далее мы передадим 
Heroine
указатель на ее текущее 
состояние, избавляемся от громоздкого 
switch
и деле-
гируем его работу состоянию:
class Heroine
{
public:
virtual void handleInput(Input input)
{
state_->handleInput(*this, input);
}
virtual void update() 
{
state_->update(*this);
}
// …
private:
HeroineState* state_;
};
Для того чтобы «изменить состояние», нам просто 
надо присвоить указателю 
state_
значение, которое 
будет указывать на другой объект 
HeroineState
. Это 
паттерн Состояние (State) в чистом виде.
Так, а где объекты состояний?
Кое о чем я сознательно умолчал. Если мы хотим из-
менить состояние, нам нужно присвоить указателю 
state_
другое значение. Но откуда берутся объекты 
состояний? При реализации с помощью 
enum
все было 
чертовски элементарно, значения 
enum
примитивны, 
как обычные числа. Но сейчас наши состояния являют-
ся классами, следовательно, нам нужен реальный экзем-
пляр, чтобы на него указать. И тут есть два решения.
Статические состояния
Если у статического объекта нет других полей, то един-
ственные данные, которые он хранит, —
указатель 
Это очень похоже 
на паттерны Стратегия 
(Strategy) и Объект типа 
(Type Object) (с. 248). 
Во всех трех случаях 
у вас есть главный объ-
ект, который делегирует 
что-то подчиненному. 
Разница в 
предназначе-
нии
.
• Паттерн Стратегия 
(Strategy) нужен для 
того, чтобы 
уменьшить 
связанность 
главного 
класса и его поведе-
ния.
• Цель паттерна Объект 
типа (Type Object) —
заставить 
несколько
объектов вести себя 
похожим образом, ис-
пользуя 
общую
ссылку 
на один тип объекта.
• А паттерн Состояние 
(State) предназначен 
для того, чтобы 
изме-
нить
поведение объ-
екта путем 
изменения
объекта, которому он 
делегирует.
Если у состояния вовсе 
нет полей и определен 
всего 
один
виртуальный 
метод, то паттерн можно 
упростить еще больше. 
Замените каждый 
класс
состояния на 
функцию
состояния — обычную 
функцию верхнего 
уровня. Тогда поле 
state_
в вашем главном классе 
превратится в простой 
указатель на функцию.



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   92   93   94   95   96   97   98   99   ...   313




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish