A-tit indd


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



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

Паттерны программирования игр
— Другой взгляд на паттерны проектирования
131
// 7 |
return NULL;
}
Если есть такая возможность, я предпочитаю исполь-
зовать статические состояния, поскольку они не потреб-
ляют память и ресурсы процессора, создавая объекты 
при каждой смене состояния. Для состояний, которые 
более, эм-м-м, стабильные, — самое оно. (Для состоя-
ний, не представляющих собой нечто большее, чем 
про-
сто
состояния, — это как раз то, что нужно.)
Входные и выходные действия
Цель использования паттерна Состояние (State) за-
ключается в инкапсуляции всех данных и поведения 
для одного состояния в единый класс. Мы уже почти ее 
достигли, но есть еще несколько нерешенных проблем. 
Когда героиня изменяет состояние, мы изменяем ее 
спрайт (то есть графический объект, ее представляю-
щий). Прямо сейчас код, ответственный за это, при-
надлежит тому состоянию, 
из
которого она выходит. 
Когда она изменяет состояние с «Пригнуться» на «Сто-
ять», состояние «Пригнуться» определяет, какое изоб-
ражение используется:
HeroineState* DuckingState::handleInput(
Heroine& heroine, Input input)
{
if (input == RELEASE_DOWN)
{
heroine.setGraphics(IMAGE_STAND);
return new StandingState();
}
// 6 …
}
На самом деле мы хотим, чтобы каждое состояние 
само отвечало за свою графику. Мы может добить-
ся этого, назначив состоянию 
входное действие
(entry 
action):


132
Состояние (State) — 
Паттерны программирования игр
class StandingState : public HeroineState
{
public:
virtual void enter(Heroine& heroine)
{
heroine.setGraphics(IMAGE_STAND);
}
// 6 …
};
Возвращаемся в 
Heroine
и изменяем код, обрабаты-
вающий изменение состояния, так, чтобы он вызывал 
входное действие состояния:
void Heroine::handleInput(Input input)
{
HeroineState* state = state_->handleInput(
*this, input);
if (state != NULL)
{
delete state_;
state_ = state;
// ` 6 .
state_->enter(*this);
}
}
Это позволяет еще более упростить код состояния 
«Пригнуться»:
HeroineState* DuckingState::handleInput(
Heroine& heroine, Input input)
{
if (input == RELEASE_DOWN)
{
return new StandingState();
}
// 6 …
}



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   94   95   96   97   98   99   100   101   ...   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