A-tit indd


Команда (Command) —  Паттерны программирования игр



Download 3,35 Mb.
Pdf ko'rish
bet27/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   23   24   25   26   27   28   29   30   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

38
Команда (Command) — 
Паттерны программирования игр
выбирающих объект команды, мы 
передадим
объект для 
управления:
class Command
{
public:
virtual ~Command() {}
virtual void execute(GameActor& actor) = 0;
};
Здесь 
GameActor
— это класс «игрового объекта», 
который представляет персонажа в игровом мире. Мы 
передаем его функции 
execute()
, чтобы производные 
классы команд вызывали методы для выбранного персо-
нажа, например:
class JumpCommand : public Command
{
public:
virtual void execute(GameActor& actor)
{
actor.jump();
}
};
Теперь мы можем использовать один-единствен-
ный класс, чтобы заставить прыгать любого персонажа 
в игре. Правда, нам пока недостает кода между обработ-
чиком ввода и командой: он должен принять команду 
на вход и вызвать ее для нужного объекта. Первым де-
лом мы изменим функцию 
handleInput()
так, чтобы 
она 
возвращала
команды:
Command* InputHandler::handleInput()
{
if (isPressed(BUTTON_X)) return buttonX_;
if (isPressed(BUTTON_Y)) return buttonY_;
if (isPressed(BUTTON_A)) return buttonA_;
if (isPressed(BUTTON_B)) return buttonB_;
// ,
.


Паттерны программирования игр
— Другой взгляд на паттерны проектирования
39
return NULL;
}
Она не может исполнить команду сразу, поскольку 
не знает, какого актора в нее передать. Вот где мы ис-
пользуем тот факт, что команда является реифициро-
ванным вызовом (
rei ed call
), — мы можем 
отло-
жить
выполнение вызываемого метода.
Теперь нам нужен код, который берет эту команду 
и выполняет ее для актора, соответствущего игроку. На-
пример:
Command* command = inputHandler.handleInput();
if (command)
{
command->execute(actor);
}
Подразумевая под переменной 
actor
ссылку на пер-
сонажа игрока, который таким образом корректно от-
реагирует на пользовательский ввод, мы получим, по 
сути, ровно то же самое, что и в первом примере. Но до-
бавление уровня косвенности между командой и акто-
ром, который ее выполняет, дало нам изящную допол-
нительную возможность: 
теперь мы можем позволить 
игроку управлять любым актором в игре, меняя актора, 
для которого исполняются команды
.
На практике это не особо распространенная функция, 
но у нее есть другой, довольно часто встречающийся ва-
риант. До сих пор мы рассматривали только персонажа, 
управляемого игроком, но как насчет других акторов 
в игре? Они управляются ИИ. Мы можем использовать 
тот же паттерн Команды в качестве интерфейса между 
движком ИИ и акторами; код ИИ будет просто генери-
ровать объекты типа 
Command
.
Уменьшение связанности между ИИ, выбирающим 
команды, и кодом акторов, выполняющих эти команды, 
дает нам бо льшую гибкость. Мы можем использовать раз-
ные модули ИИ для разных акторов. Или комбинировать 
их и выбирать ИИ для разных видов поведения. Хотите 



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   23   24   25   26   27   28   29   30   ...   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