A-tit indd



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

 Совсем никакого Бьйорна?
Если вы взглянете на класс 
Bjorn
сейчас, вы увидите, 
что в нем не осталось ничего от Бьйорна, он превратил-
ся в контейнер для компонентов. Фактически это хо-
роший кандидат на роль базового класса для «игрово-
го объекта», который подойдет 
каждому
объекту в игре. 
Нам остается только передать ему 
все
компоненты, и мы 
сможем создать любой вид объекта, выбирая нужные 
нам части. Почувствуйте себя Франкенштейном.
Возьмем два оставшихся компонента, физику и гра-
фику, и тоже спрячем их за интерфейсы:
class PhysicsComponent
{
public:
virtual ~PhysicsComponent() {}
virtual void update(GameObject& object,
World& world) = 0;
};
class GraphicsComponent
{
public:
virtual ~GraphicsComponent() {}
virtual void update(GameObject& object,
Graphics& graphics) = 0;
};
Ну и ради кофе. Ради го-
рячего ароматного кофе.


Паттерны программирования игр
— Паттерны уменьшения связанности
287
Наш класс 
Bjorn
переродился в обобщенный класс 
GameObject
, который использует эти интерфейсы:
class GameObject
{
public:
int velocity;
int x, y;
GameObject(InputComponent* input,
PhysicsComponent* physics,
GraphicsComponent* graphics)
:input_(input),
physics_(physics),
graphics_(graphics)
{}
void update(World& world, Graphics& graphics)
{
input_->update(*this);
physics_->update(*this, world);
graphics_->update(*this, graphics);
}
private:
InputComponent* input_;
PhysicsComponent* physics_;
GraphicsComponent* graphics_;
};
Наши конкретные классы просто переименованы 
и реализуют следующие интерфейсы:
class BjornPhysicsComponent : 
public 
PhysicsComponent
{
public:
virtual void update(GameObject& obj, World& world)
{
// €, 6 '…
}
};
class BjornGraphicsComponent
: public GraphicsComponent
Некоторые системы 
компонентов заходят 
еще дальше. Вместо 
класса 
GameObject
, со-
держащего компоненты, 
игровая сущность пред-
ставляет собой просто 
идентификатор, число. 
Набор компонентов 
хранится отдельно, 
и каждый из них знает, 
к какому идентифика-
тору сущности он при-
креплен.
Такие системы компо-
нентов сущностей явля-
ются абсолютным 
уменьшением связанно-
сти и позволяют вам до-
бавлять новые компо-
ненты к сущности, 
а та даже не будет 
об этом знать. Больше 
информации см. в главе 
«Локальность данных 
(Data Locality)» (с. 343).



Download 3,35 Mb.

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