A-tit indd


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



Download 3,35 Mb.
Pdf ko'rish
bet207/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   203   204   205   206   207   208   209   210   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Паттерны программирования игр
— Паттерны уменьшения связанности
283
{
input_.update(*this);
physics_.update(*this, world);
graphics_.update(*this, graphics);
}
private:
InputComponent input_;
PhysicsComponent physics_;
GraphicsComponent graphics_;
};
Сейчас у класса 
Bjorn
всего две функции: он содер-
жит набор определяющих его компонентов и состояние, 
которое он разделяет между несколькими областями. 
Позиция и скорость все еще находятся в базовом клас-
се 
Bjorn
по двум причинам. Во-первых, это общее для 
всех областей состояние — практически каждый ком-
понент будет использовать эти поля, и потому не особо 
ясно, какому компоненту они должны бы принадлежать, 
если мы решим делегировать и их.
А во-вторых, что даже более важно, мы получаем воз-
можность взаимодействия между компонентами без 
фактического их связывания. Давайте посмотрим, как 
мы можем это использовать.
Робо-Бьйорн
До сих пор мы выносили поведение в отдельные клас-
сы компонентов, но не делали его 
абстрактным
. Класс 
Bjorn
имел информацию о конкретных классах, где 
определено его поведение. Давайте изменим это.
Возьмем компонент для обработки пользовательско-
го ввода и спрячем его за интерфейсом. Мы превратим 
InputComponent
в абстрактный базовый класс:
class InputComponent
{
public:
virtual ~InputComponent() {}
virtual void update(Bjorn& bjorn) = 0;
};


284
Компонент (Component) — 
Паттерны программирования игр
А затем возьмем наш код для обработки пользова-
тельского ввода и поместим его в класс, который реали-
зует этот интерфейс:
class PlayerInputComponent : public InputComponent
{
public:
virtual void update(Bjorn& bjorn)
{
switch (Controller::getJoystickDirection())
{
case DIR_LEFT:
bjorn.velocity -= WALK_ACCELERATION;
break;
case DIR_RIGHT:
bjorn.velocity += WALK_ACCELERATION;
break;
}
}
private:
static const int WALK_ACCELERATION = 1;
};
А код класса 
Bjorn
изменим так, чтобы вместо 
встраивания экземпляра он содержал указатель на ком-
понент ввода:
class Bjorn
{
public:
int velocity;
int x, y;
Bjorn(InputComponent* input)
: input_(input)
{}
void update(World& world, Graphics& graphics)
{
input_->update(*this);
physics_.update(*this, world);
graphics_.update(*this, graphics);
}



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   203   204   205   206   207   208   209   210   ...   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