Huom! Nämä wikisivut ovat osittain vielä työn alla, osa sisällöstä saattaa olla puutteellista. Ongelmakohtien viereen voit jättää kommentin, yliopiston käyttäjät myös pystyvät (ja saavat) muokata sivuja.

Jypelin käyttöohjeet » Miten voin ryhmitellä ohjaimia

Jos pelissä on esimerkiksi useita pelaajia tai pelitilanteita, voi olla järkevää jaotella ohjaimia omiin ryhmiinsä. Ryhmiteltyjä ohjaimia voidaan ottaa käyttöön ja poistaa käytöstä (tai kokonaan pelistä) yhdellä koodirivillä.

1. Ohjainryhmä (ListenContext) ja sen luominen

Ohjainryhmä on tyypiltään ListenContext. Yleensä ryhmä on hyvä asettaa peliin attribuutiksi (class-sanan ja aaltosulun jälkeen) jotta siihen pääsee kiinni kaikista aliohjelmista.

public class Peli : PhysicsGame
{
   ListenContext ohjaimet;

Ryhmä voidaan alustaa ennen ohjainten kuuntelua (aliohjelman sisällä!) seuraavasti

ohjaimet = ControlContext.CreateSubcontext();

Sen jälkeen ohjaimet voidaan lisätä kirjoittamalla kuuntelurivin perään .InContext ja sille parametriksi luotu ryhmän nimi. Esimerkiksi

pelaajan1Kontrollit = this.ControlContext.CreateSubcontext();
Keyboard.Listen(...).InContext(pelaajan1Kontrollit);
Keyboard.Listen(...).InContext(pelaajan1Kontrollit);
Mouse.Listen(...).InContext(pelaajan1Kontrollit);

2. Ohjainten poistaminen käytöstä

Ohjainryhmän voi poistaa väliaikaisesti käytöstä sen Disable-metodilla.

// poistaa pelaajan 1 kontrollit käytöstä
pelaajan1Kontrollit.Disable();

Kontrollit saa vastaavasti takaisin käyttöön Enable-metodilla.

// pelaajan 1 kontrollit takaisin käyttöön
pelaajan1Kontrollit.Enable();

Jos kontrollit halutaan poistaa kokonaan (esimerkiksi jos ne halutaan luoda uudelleen), voidaan sanoa

// pelaajan 1 kontrollit pois kokonaan
pelaajan1Kontrollit.Destroy();

Huomaa, että tuhottua kontekstia (ryhmää) ei voi enää käyttää uudelleen ennen kuin se on alustettu uudelleen (CreateSubcontext)!

3. Aliryhmien luominen

Kontrolliryhmiä on myös mahdollista luoda toistensa sisälle.

pelaajienKontrollit = ControlContext.CreateSubcontext();
pelaajan1Kontrollit = pelaajienKontrollit.CreateSubcontext();
pelaajan2Kontrollit = pelaajienKontrollit.CreateSubcontext();
pelaajan1Ampuminen = pelaajan1Kontrollit.CreateSubcontext();
pelaajan2Ampuminen = pelaajan2Kontrollit.CreateSubcontext();

Jos ryhmät piirrettäisiin nyt puurakenteeksi (hierarkia), se näyttäisi tältä:

Huomaa, että ControlContext on aina hierarkiassa ylimpänä. Se on pelin ns. pääkonteksti. Metodit vaikuttavat aina alaspäin puussa, eli esimerkiksi

pelaajan1Kontrollit.Disable();

poistaa käytöstä myös ryhmän pelaajan1Ampuminen.

4. Ikkunoihin liittyvät ohjainryhmät

Jokaisella ikkunalla on myös ControlContext niin kuin pelilläkin. Näin vain päällimmäisellä ikkunalla on ns. fokus eli sen alla olevien ikkunoiden (tai pelin) ohjaimet eivät toimi ennen kuin ikkuna on suljettu.

Ikkunalle voi lisätä vastaavasti ohjaimia joko yksitellen

Keyboard.Listen(...).InContext(ikkuna);

tai uutena ryhmänä

ListenContext ryhma = ikkuna.ContolContext.CreateSubcontext();
Keyboard.Listen(...).InContext(ryhma);
Keyboard.Listen(...).InContext(ryhma);

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.