A-tit indd


Паттерны программирования игр



Download 3,35 Mb.
Pdf ko'rish
bet199/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   195   196   197   198   199   200   201   202   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Паттерны программирования игр
— Паттерны уменьшения связанности
273
друга. Но у нас они перемешаны в едином классе. А мы 
уже видели, как подобный подход приводит к огромно-
му исходнику в пять тысяч строк, так что только самые 
отважные из ваших программистов могут решиться от-
крыть подобный файл.
Это отличная гарантия трудовой занятости, но 
в то же время — настоящий ад. А изменения в классе та-
кого размера непременно приводят к непредсказуемым 
последствиям. И совсем скоро 
ошибки
в таком классе бу-
дут накапливаться быстрее, чем 
функциональность
.
Гордиев узел
А проблема связанности намного сильнее проблемы 
большого объема. Все системы игры связаны в одном 
гигантском клубке кода, подобного этому:
if (collidingWithFloor() &&
(getRenderState() != INVISIBLE))
{
playSound(HIT_FLOOR);
}
И каждый программист, который захочет внести 
сюда изменения, должен будет разобраться в работе фи-
зического движка, графики и звука, просто чтобы убе-
диться: он ничего не сломает.
Итак, у нас есть две взаимосвязанные проблемы: 
а) класс затрагивает слишком много областей; б) класс 
настолько большой, что работа превращается в ночной 
кошмар. И в худшем случае программисты начнут ис-
пользовать «костыли», лишь бы не связываться с ужас-
ным клубком кода, в который превратился наш класс 
Bjorn
.
Распутывание узла
Мы можем решить проблему методом Александра Ма-
кедонского — с помощью меча. Возьмем монолитный 
класс 
Bjorn
и нарежем его на дольки по границам об-
ластей. Например, мы возьмем весь код, ответственный 
И хотя связанность 
не приветствуется в 
лю-
бой
игре, она особенно 
страшна для современ-
ных игр, в которых реа-
лизована параллель-
ность потоков. Для 
многоядерных процессо-
ров важна синхронность 
выполнения кода в не-
скольких потоках. Один 
из способов разбиения 
кода на потоки — по гра-
нице областей: ИИ 
в один поток, звук в дру-
гой, рендеринг в третий 
и так далее.
Если вы реализуете 
подобное, то, чтобы из-
бежать взаимных блоки-
ровок (deadlocks) и дру-
гих ошибок 
параллелизма, важно со-
хранять независимость 
областей. А наличие еди-
ного класса, в котором 
метод 
UpdateSounds()
вызывается из одного 
потока, 
а 
RenderGraphics()
— 
из другого, прямо напра-
шивается на подобные 
ошибки.



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   195   196   197   198   199   200   201   202   ...   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