Tipy a triky pre vývoj aplikácií a hier 2

Tento príspevok bude venovaný ovládaniu pomocou klávesnice. Zdalo by sa že pre multidotykovú platformu nie je čo riešiť, opak je pravdou. Väčšina používateľov má stále klasické notebooky a skúsme sa zamyslieť nad tým, ako často používatelia konvertibilných zariadení tieto rozpoja a používajú len tabletovú časť.

Určite vás napadne odchytiť udalosti KeyDown a KeyUp pre xaml stránku na ktorej prebieha dej aplikácie, či hry. Narazil som však na niekoľko problémov. Pozrite si obrázok hlavnej a jedinej obrazovky hry FLAPPY.

Sú tam dve tlačidlá Start a Cancel a posuvný prvok na zapínanie a vypínanie hry. Ak používateľ naposledy stlačil tlačidlo START, hra ovládaná kurzorovými tlačidlami bude fungovať uspokojivo. Tlačidlá SPACE a ENTER budú nepoužiteľné, nakoľko spôsobia zatlačenie tlačidla ktoré bolo naposledy použite (aplikácia má naň nastavený fokus). Čo sa ale stane, ak používateľ pomocou prvku ToggleSwitch vypne, alebo zapne zvuk. Aktívne vybrané zostane tento prvok a kurzorovými klávesami vľavo a vpravo už nebudete ovládať figúrku, ale zapínať a vypínať zvuk.

Preto je potrebné zachytiť udalosť na úrovni CoreWindow, skôr než ju preberú prvky používateľské rozhranie. Obsluha udalosti sa registruje napríklad v

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
  Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;
  Window.Current.SizeChanged += Window_SizeChanged;
  navigationHelper.OnNavigatedTo(e);
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   Window.Current.CoreWindow.KeyDown -= CoreWindow_KeyDown;
   Window.Current.CoreWindow.KeyUp -= CoreWindow_KeyUp;
   Window.Current.SizeChanged -= Window_SizeChanged;
   navigationHelper.OnNavigatedFrom(e);
}

V obslužnej procedúre sa zachytáva zatlačenie a v prípade potreby aj uvoľnenie klávesov potrebných pre ovládanie hry

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
  if (klav != null)
{
   switch (args.VirtualKey)
   {
     case Windows.System.VirtualKey.Up: klav.dotykUp(); break;
     case Windows.System.VirtualKey.Left: klav.dotykLeft(); break;
     case Windows.System.VirtualKey.Right: klav.dotykRight(); break;
     case Windows.System.VirtualKey.Down: klav.dotykDown(); break;
     case Windows.System.VirtualKey.Escape: klav.dotykCancel(); break;
     case Windows.System.VirtualKey.Space: klav.dotykSpace(); break;
   }
}
}

V budúcom pokračovaní sa zameriam na dotykové ovládanie

Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s


%d bloggers like this: