A-tit indd



Download 3,35 Mb.
Pdf ko'rish
bet118/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   114   115   116   117   118   119   120   121   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

• Если буфер единый
• Переключение проще.
Раз есть всего одна пара бу-
феров, одной операции переключения достаточ-
но. А если переключение можно сделать простой 
сменой указателей, то и целый буфер переключить 
очень легко, независимо от размера, простым при-
своением значений.
• Если нужный фрагмент данных принадлежит мно-
гим объектам
• Обмен медленнее
. Если мы хотим переключить бу-
феры, мы должны пройти по всем объектам и сооб-
щить каждому: нужно сменить буфер.
В примере с шутами это хорошо сработало, ведь 
нам все равно требовалось очистить предыдущее со-
стояние — в любом случае пришлось бы обращать-
ся к каждому фрагменту данных буфера. Но если та-
кой необходимости нет, то можно добиться той же 


производительности, как и при едином блоке дан-
ных, оптимизируя процесс.
Идея в том, чтобы применить концепцию ука-
зателей на «текущий» и «следующий» к каждому 
из объектов, превратив их в 
смещенные
относитель-
но объектов. Примерно так:
class Actor
{
public:
static void init() {current_ = 0;}
static void swap() {current_ = next();}
void slap() {slapped_[next()] = true;}
bool wasSlapped() {return slapped_
[current_];}
private:
static int current_;
static int next() {return 1 -
current_;}
bool slapped_[2];
};
Акторы получают доступ к текущему состоянию 
«Получил пощечину», используя 
current_
, указы-
вающий на массив состояний. Следующее состоя-
ние — всегда другой индекс в массиве, который 
можно вычислить с помощью 
next()
. Переключе-
ние заключается в изменении индекса 
current_

Самое хитрое в этом решении, что 
swap()

ста-
тическая
функция: ее надо вызвать всего один раз, 
чтобы 
все
состояния акторов переключились.
Смотрите также
Вы можете встретить реализованный паттерн Двойной 
буфер (Double Buffer) почти в любом графическом API. 
Например, OpenGL реализует 
swapBu ers()
, Direct3D 
имеет «цепочки переключений», а фреймворк Microsoft 
XNA переключает буферы методом 
endDraw()
.



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   114   115   116   117   118   119   120   121   ...   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