A-tit indd


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



Download 3,35 Mb.
Pdf ko'rish
bet124/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   120   121   122   123   124   125   126   127   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Паттерны программирования игр
— Паттерны очередности
167
Пример кода
Для такого длинного вступления код игрового цикла 
действительно прост. Мы рассмотрим пару вариантов, 
а затем быстро пробежимся по их достоинствам и недо-
статкам.
Игровой цикл управляет ИИ, рендерингом и други-
ми системами игры, но это выходит за рамки сути са-
мого паттерна, так что в примерах будем просто вызы-
вать фиктивные методы. Действительная реализация 
render()

update()
и других будет домашним (слож-
ным!) заданием для читателя.
Беги, беги со всех ног
Мы уже видели реализацию простейшего игрового ци-
кла:
while (true)
{
processInput();
update();
render();
}
Его главная проблема в том, что вы не можете кон-
тролировать скорость игры. На быстрых компьютерах 
цикл будет выполняться молниеносно — пользователи 
даже не успеют осознать происходящее. А на медленных 
компьютерах игра станет зависать. А уж если какая-то 
часть игры перенасыщена событиями или в ней больше 
используется ИИ или физика, то она будет идти значи-
тельно медленнее, чем другие.
Вздремните
Первый вариант, который мы рассмотрим, предлага-
ет весьма простое решение. Скажем, вы хотите, чтобы 
игра постоянно работала на 60 FPS (примерно 16 мил-
лисекунд на каждый кадр). До тех пор пока вы можете 
уложить вычислительные процессы и рендеринг в это 
1000 мс/FPS = мс на кадр


168
Игровой цикл (Game Loop) — 
Паттерны программирования игр
время, скорость смены кадров будет постоянной. Вам 
остается только обработать кадр, а затем 
подождать
указанное время, прежде чем обрабатывать следующий, 
примерно так (рис. 9.1).
Рис. 9.1.
Чертовски простой игровой цикл
Код будет выглядеть примерно так:
while (true)
{
double start = getCurrentTime();
processInput();
update();
render();
sleep(start + MS_PER_FRAME -
getCurrentTime());
}
Вызов 
sleep()
гарантирует, что игра не станет ра-
ботать слишком 
быстро
при слишком быстрой обработ-
ке кадров. Но это не поможет, если игра будет слишком 
медленной
. Если потребуется больше, чем 16 миллисе-
кунд на обработку одного кадра, то временная задержка 
даст 
отрицательный
эффект. Если бы компьютеры мог-
ли путешествовать назад во времени, все было бы на-
много проще, но увы.
Игра просто замедляется. Вы можете, конечно, умень-
шить количество вычислений за кадр — уменьшить ка-
чество графики или сделать искусственный интеллект 
чуть менее интеллектуальным. Но такие изменения по-
влияют на качество игры для всех пользователей, даже 
тех, чьи компьютеры достаточно мощные.



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   120   121   122   123   124   125   126   127   ...   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