Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Najprostszaimplementacjawyglądajakośtak:
voidInputHandler::handleInput()
{
if(isPressed(BUTTON_X))jump();
elseif(isPressed(BUTTON_Y))freGun();
elseif(isPressed(BUTTON_A))swapWeapon();
elseif(isPressed(BUTTON_B))lurchIneffectively();
}
Zwykletafunkcjajestwywoływanaraznakażdąklatkęprzezpętlę
gry(s.123)ijestempewny,żełatwomożnadojśćdotego,cotakie-
gorobi.Tenkoddziała,jeślichcemynasztywnoprzypisaćpolecenia
użytkownikadoakcjiwgrze,alewielegierpozwalaużytkownikowi
naskonfgurowanieodwzorowaniaprzycisków.
Abytoobsłużyć,musimyzamienićtebezpośrednieodwołaniado
jump()ifreGun()nacoś,cobędziemywstaniepodstawić.nPodsta-
wianie”bardzoprzypominaprzypisywaniewartościzmiennej,potrze-
bujemywięcobiektu,którymożenamposłużyćzareprezentacjęakcji
wgrze.WprowadzamywzorzecPolecenie.
Definiujemyklasębazową,którareprezentujewywoływalnepolece-
niewgrze:
classCommand
{
public:
virtual~Command(){}
virtualvoidexecute()=0;
};
Następnietworzymypodklasydlakażdejzróżnychakcjiwgrze:
classJumpCommand:publicCommand
{
public:
virtualvoidexecute(){jump();}
};
classFireCommand:publicCommand
{
public:
virtualvoidexecute(){freGun();}
};
//Rozumiecie,ocochodzi…
Wnaszymkodzieobsługiwejściaprzechowujemywskaźnikdopolece-
niadlakażdegoprzycisku:
Wskazówka:nienależyzaczęstowciskaćB.
Jeślimamyinterfejszpojedyncząmetodą,
któraniczegoniezwraca,jestsporaszansa,
żejesttowzorzecPolecenie.
ProgramowaniegierWzorceprojektowerazjeszcze23