Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
classInputHandler
{
public:
voidhandleInput();
//Metodysłużącedopowiązaniapoleceń...
private:
Command*buttonX_;
Command*buttonY_;
Command*buttonA_;
Command*buttonB_;
};
Terazkododpowiadającyzaobsługęwejściapoprostuprzekazujetodo:
Zauważyliście,żeniesprawdzamytuNULL?
Oznaczatozałożenie,żekażdyprzycisk
będziemiałdowiązanedosiebiejakieś
polecenie.
Jeślichcemyobsługiwaćprzyciski,które
nicnierobiąiniemusząbezpośrednio
sprawdzaćNULL,możemyzdefniować
klasępolecenia,któregometodaexecute()
nierobinic.Następnie,zamiastustawiać
kodobsługiprzyciskunaNULL,robimytak,
abywskazywałonnatenobiekt.Jestto
wzorzecnazywanyUPustymobiektem”.
voidInputHandler::handleInput()
{
if(isPressed(BUTTON_X))buttonX_->execute();
elseif(isPressed(BUTTON_Y))buttonY_->execute();
elseif(isPressed(BUTTON_A))buttonA_->execute();
elseif(isPressed(BUTTON_B))buttonB_->execute();
}
Wcześniejkażdepoleceniebezpośredniowywoływałofunkcję,ateraz
mamywarstwępośrednią.
POLECENIEUCHYLSIĘ
POLECENIESTRZEL
POLECENIEZAMIEŃ
POLECENIESKOCZ
Rysunek2.2.Przyciskiodwzorowanenaprzypisywalnepolecenia
OtowzorzecPoleceniewpigułce.Jeślijużmożemydostrzecjegowar-
tość,resztętegorozdziałumożemypotraktowaćjakobonus.
Kierowanieaktorami
Klasypoleceń,któredopierocozdefiniowaliśmy,sprawdzająsię
wpoprzednimprzykładzie,alesądośćograniczone.Problempolegana
tym,żezakładająone,iżistniejąfunkcjenajwyższegopoziomutakiejak
jump(),freGun()itd.,którewukrytysposóbwiedzą,wjakisposób
odnaleźćawatargraczaizmusićgodotego,abytańczyłtak,jakmu
zagramy.
Tozałożonesprzężenieograniczaużytecznośćtychpoleceń.JumpCom-
mandmożesprawić,abyskoczyłjedyniegracz.Poluzujmytoograniczenie.
24Polecenie–Kierowanieaktorami