A-tit indd



Download 3,35 Mb.
Pdf ko'rish
bet145/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   141   142   143   144   145   146   147   148   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Архитектурные решения
Для таких простых паттернов, как этот, не очень много 
вариантов использования, но все равно есть пара под-
водных камней.
Какому классу принадлежит метод Update?
Самое очевидное, но самое важное решение, которое 
вам предстоит принять, — в какой класс поместить ме-
тод 
update()
.
• Класс сущности
Самое простое решение, если у вас уже есть класс 
сущности, ведь оно не требует создания новых 
классов. Хорошо работает, когда у вас немного сущ-
ностей, хотя индустрия уже от этого уходит.
Необходимость каждый раз создавать подкласс 
Entity
, когда вы хотите определить новое поведе-
ние, делает код хрупким, а процесс — болезненным, 
особенно если имеется много различных видов. 
В конце концов вы обнаружите, что хотели бы мно-
гократно использовать один код, но он уже не ля-
жет в стройную иерархию.
• Класс компонента
Если вы используете паттерн Компонент (Compo-
nent) (с. 272), то все будет совсем просто. Он позво-
ляет каждому компоненту обновляться независимо. 
Точно так же, как паттерн Метод Update позволяет 
вам уменьшить связанность сущностей от игрово-
го мира, он позволяет вам уменьшить связанность 


196
Метод Update (Update method) — 
Паттерны программирования игр
частей одной сущности
друг от друга. Рендеринг, 
физика и ИИ смогут сами о себе позаботиться.
• Делегированный класс
Есть и другие паттерны, предполагающие делеги-
рование части поведения класса другим объектам. 
Паттерн Состояние (State) (с. 117), например, так 
что вы можете изменить поведение объекта про-
стым изменением объекта, к которому он делеги-
рует. Паттерн Объект типа (Type Object) (с. 248) по-
зволяет разделить общее поведение для множества 
объектов одного «типа».
Если вы используете один из названных шабло-
нов, то вполне логично поместить 
update()
в де-
легированный класс. Таким образом вы можете 
иметь 
update()
в главном классе, но он не будет 
виртуальным, он будет просто делегировать к дру-
гому объекту. Примерно так:
void Entity::update()
{
// 34
state_->update();
}
Такая реализация позволяет вам изменить по-
ведение, изменяя объект, которому оно делегиру-
ется. Как и использование компонентов дает вам 
гибкость в изменении поведения без необходимо-
сти объявлять новый подкласс сущности.

Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   141   142   143   144   145   146   147   148   ...   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