Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Samankaltaiset tiedostot
Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

1. Miten tehdään peliin toinen maila?

Jypelin käyttöohjeet» Miten saan peliin pistelaskurin?

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Jypelin käyttöohjeet» Ruutukentän luominen

1. Taustatietoa näppäimistönkuuntelusta

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

Jypelin käyttöohjeet» Millaisia olioita on olemassa?

ITKP102 Ohjelmointi 1 (6 op)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Taulukot. Jukka Harju, Jukka Juslin

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olio-ohjelmointi Javalla

Osoitin ja viittaus C++:ssa

Sisältö. 22. Taulukot. Yleistä. Yleistä

4. Luokan testaus ja käyttö olion kautta 4.1

Apuja ohjelmointiin» Yleisiä virheitä

Javan perusteita. Janne Käki

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

9. Periytyminen Javassa 9.1

Sisältö. 2. Taulukot. Yleistä. Yleistä

ITKP102 Ohjelmointi 1 (6 op)

Texture Tekstuuri Peliolion päälle piirrettävä kuva. Update Päivittää Päivittää jotain, esimerkiksi pelin tilannetta.

Olio-ohjelmointi 2. välikoe HYV5SN

7. Oliot ja viitteet 7.1

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmointi 2 / 2010 Välikoe / 26.3

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Mikä yhteyssuhde on?

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Rajapinta (interface)

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

9. Periytyminen Javassa 9.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

12 Mallit (Templates)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Luokan sisällä on lista

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Ohjelmointi 2, välikoe

Luokan muodostimet (Constructors)

ITKP102 Ohjelmointi 1 (6 op)

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Metodien tekeminen Javalla

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Olio-ohjelmointi Syntaksikokoelma

1. Mitä tehdään ensiksi?

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

1. Olio-ohjelmointi 1.1

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

16. Javan omat luokat 16.1

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet

Ohjelmoinnin perusteet, kurssikoe

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Javan GUI Scratchaajalle

Muuttujat ja kontrolli. Ville Sundberg

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Java-kielen perusteet

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Javan GUI Scratchaajalle

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Java-kielen perusteita

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

UML ja luokkien väliset suhteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

YHTEYSSUHDE (assosiation)

14. Poikkeukset 14.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Transkriptio:

Muilla kielillä: English Suomi Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia? Kun kaksi fysiikkaoliota törmää toisiinsa, syntyy törmäystapahtuma. Nämä tapahtumat voidaan ottaa kiinni tapahtumankäsittelijöillä, joissa reagoidaan törmäykseen esimerkiksi tuhoamalla toinen olioista tai kasvattamalla pistelaskurin arvoa. Törmäyksenkäsittely yhdelle tunnetulle oliolle Aluksi tapahtumankäsittelijä täytyy asettaa seuraamaan tietyn olion törmäyksiä. Esimerkiksi jos pelissä on olio nimeltä pelaaja jonka törmäyksistä toisiin olioihin ollaan kiinnostuneita, voidaan pelaajan luomisen jälkeen sanoa: AddCollisionHandler(pelaaja, PelaajaTormasi); Aina kun pelaaja törmää johonkin, mihin tahansa, fysiikkaolioon pelikentällä, kutsutaan aliohjelmaa PelaajaTormasi. Ennen kuin törmäyksenkäsittely toimii, tarvitaan aliohjelma joka käsittelee törmäyksen. Törmäyksen käsittelevälle aliohjelmalle tulee parametreina törmänneet kaksi oliota. void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject kohde) MessageDisplay.Add("Pelaaja törmäsi!"); Näin joka kerran kun pelaaja törmää johonkin, suoritetaan aliohjelma JokuTormasi. Parametreista tormaaja viittaa tässä tapauksessa pelaajaan ja kohde olioon johon pelaaja törmäsi. Törmäys kahden tunnetun olion välillä Jos halutaan reagoida törmäykseen kahden tietyn olion välillä, voidaan käskeä AddCollisionHandler(pelaaja1, pelaaja2, PelaajatTormaavat); Törmäävät oliot ovat tässä tapauksessa pelaaja1 ja pelaaja2. Tapahtumankäsittelijä pelaajattormaavat voidaan tehdä samaan tapaan kuin edellisessäkin esimerkissä. void PelaajatTormaavat(PhysicsObject tormaaja, PhysicsObject kohde) MessageDisplay.Add("Bump!"); Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia? 1

Törmäys yhden tunnetun ja useamman samantyyppisen olion välillä Usein pelissä on yksi pelaaja ja useampia erityyppisiä olioita: vihollisia, aarteita, piikkiesteitä jne. Törmäyskäsittelyyn ei enää riitäkään tieto siitä että pelaaja törmää johonkin olioon tai pelaaja törmää tiettyyn yhteen olioon. Samantyyppisille olioille voidaan antaa yhteinen tagi, jolla olioryhmät voidaan erottaa toisistaan. Tagi on järkevintä asettaa samalla kun olio luodaan. void LuoVihollinen(Vector paikka, double leveys, double korkeus) PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus); vihollinen.position = paikka; vihollinen.tag = "pahis"; Add(vihollinen); void LuoHealthPotion(Vector paikka, double leveys, double korkeus) PhysicsObject pottu = new PhysicsObject( leveys, korkeus ); pottu.position = paikka; pottu.tag = "health"; Add(pottu); Törmäyskäsittelijät voidaan luoda seuraavalla tavalla esim. pelaajan luomisen yhteydessä: AddCollisionHandler(pelaaja, "pahis", PelaajaOsuu); AddCollisionHandler(pelaaja, "health", PelaajaParantuu); Olion ja tagin väliset tapahtumankäsittelijät voidaan tehdä seuraavaan tapaan: void PelaajaOsuu(PhysicsObject pelaaja, PhysicsObject kohde) pelaajanterveys--; if (pelaajanterveys <= 0) pelaaja.destroy(); void PelaajaParantuu(PhysicsObject pelaaja, PhysicsObject kohde) pelaajanterveys++; Tässä esimerkissä on oletettu, että kokonaislukumuuttuja pelaajanterveys löytyy pelin attribuuteista. public class OmaPeli : Game int pelaajanterveys = 5; public override void Begin() // jatkuu... Törmäys yhden tunnetun ja useamman samantyyppisen olion välillä 2

Törmäykset muuntyyppisiin olioihin kuin PhysicsObject Pelissä voi olla muunkintyyppisiä olioita kuin PhysicsObject, esimerkiksi PlatformCharacter. Olion täytyy kuitenkin periytyä PhysicsObjectista, jotta sen törmäyksiä voidaan käsitellä. Mutta jos esimerkiksi PlatformCharacter-tyyppistä oliota käsitellään PhysicsObjectina, esimerkiksi sen Walk-metodia ei voi käyttää, sillä PhysicsObjectilla ei ole sellaista! Tähän on olemassa kaksi keinoa. Yleisempi keino on muuttaa olion tyyppi halutuksi. void Tormays(PhysicsObject tormaaja, PhysicsObject kohde) PlatformCharacter hahmo = tormaaja as PlatformCharacter; hahmo.walk(direction.right); Toinen, helpompi tapa on käyttää AddCollisionHandler-aliohjelman tyyppiparametrillista versiota: AddCollisionHandler<PlatformCharacter, PhysicsObject>(pelaaja, HahmonTormays); Tämä kertoo, että törmäyksenkäsittelijäaliohjelman HahmonTormays parametrit ovat tyyppiä PlatformCharacter (törmääjä) ja PhysicsObject (kohde). Nyt voidaan kirjoittaa törmäyksenkäsittelijä suoraan muotoon void Tormays(PlatformCharacter tormaaja, PhysicsObject kohde) tormaaja.walk(direction.right); Huomaa, että jos yrität käyttää yo. aliohjelmaa tavalliselle, tyyppiparametrittomalle AddCollisionHandler-metodille, kääntäjä antaa siitä virheen. void Tormays(PhysicsObject tormaaja, PhysicsObject kohde) PlatformCharacter hahmo = tormaaja as PlatformCharacter; hahmo.walk(direction.right); Valmiit törmäystapahtumat CollisionHandler-luokka sisältää valmiita käsittelijöitä yleisimmille törmäystapahtumille. Olioiden tuhoaminen DestroyObject tuhoaa törmäävän olion. AddCollisionHandler(pelaaja, vihollinen, CollisionHandler.DestroyObject); DestroyTarget tuhoaa olion johon törmätään. ase.projectilecollision = CollisionHandler.DestroyTarget; Törmäykset muuntyyppisiin olioihin kuin PhysicsObject 3

DestroyBoth tuhoaa molemmat. ase.projectilecollision = CollisionHandler.DestroyBoth; Räjähdykset ExplodeObject räjäyttää törmäävän olion. Se ottaa parametriksi räjähdyksen säteen ja totuusarvon siitä, tuhotaanko olio samalla. AddCollisionHandler(pelaaja, vihollinen, CollisionHandler.ExplodeObject(100, true)); ExplodeObject toimii kuten ExplodeTarget, mutta se räjäyttää olion, johon törmätään. AddCollisionHandler(salama, CollisionHandler.ExplodeTarget(150, false)); ExplodeBoth tekee räjähdyksen olioiden törmäyskohtaan ja valinnaisesti tuhoaa kummatkin oliot samalla. AddCollisionHandler(salama, CollisionHandler.ExplodeBoth(200, true)); Jos pelissä on käytössä ExplosionSystem (ks. Efektit), voidaan käyttää AddEffect-käsittelijää. AddEffect ottaa parametrikseen räjähdysjärjestelmän ja käytettävien partikkelien määrän. AddEffect ei tuhoa olioita automaattisesti, mutta sekin onnistuu lisäämällä erillinen DestroyObject-käsittelijä. AddCollisionHandler(pelaaja, vihollinen, CollisionHandler.AddEffectOnTarget(paukkupatteri, 40)); AddCollisionHandler(pelaaja, vihollinen, CollisionHandler.DestroyObject); AddCollisionHandler(salama, CollisionHandler.AddEffectOnTarget(paukkupatteri, 80)); Laskurin arvon muuttaminen Laskurin arvoa voidaan kasvattaa/vähentää käyttämällä AddMeterValue-törmäyksenkäsittelijää. Näin voidaan esimerkiksi antaa pelaajalle pisteitä kerättävistä esineistä tai vähentää terveyttä/elämiä viholliseen osumisesta. AddCollisionHandler(pelaaja, "bonus", CollisionHandler.AddMeterValue(pisteet, 10)); AddCollisionHandler(pelaaja, "piikki", CollisionHandler.AddMeterValue(health, -1)); Tätä tapaa ei voida käyttää mikäli, pisteiden laskemisella on jotakin muita ehtoja kuin pelkkä törmääminen. Tällöin pistelaskuri pitää käsitellä normaalissa törmäystapahtumassa ja kirjoittaa sinne ehto ja kasvattaa laskuria normaalilla tavalla. Ääniefektin soittaminen Ääniefektin soittaminen törmäyksen yhteydessä onnistuu tapahtumankäsittelijällä PlaySound, jolle annetaan parametriksi ääniefektin nimi. Nimi on yleensä sama kun tiedoston nimi, mutta ilman tiedostopäätettä. AddCollisionHandler(pelaaja, "tuli", CollisionHandler.PlaySound("tuskan_parahdus")); Olioiden tuhoaminen 4

Impulssi HitObject lyö törmäävää oliota ja HitTarget oliota, johon törmätään. Molemmat ottavat parametrikseen vektorin, joka kertoo lyönnin suunnan ja voiman. Vector ylos = new Vector(200, 0); AddCollisionHandler(pelaaja, "trampoliini", CollisionHandler.HitObject(ylos)); Olion koon muuttaminen Olion kokoa on mahdollista muuttaa törmäyksessä IncreaseObjectSize ja IncreaseTargetSize -käsittelijöillä. Ensimmäinen muuttaa törmääjän kokoa ja jälkimmäinen sen olion, johon törmätään. Molemmat ottavat parametrikseen leveyden ja korkeuden muutoksen (siinä järjestyksessä). Muutos voi olla myös negatiivinen, jolloin olio pienenee. AddCollisionHandler(pelaaja, "nakki", CollisionHandler.IncreaseObjectSize(10, 10)); AddCollisionHandler(kirves, CollisionHandler.IncreaseTargetSize(-5, 0)); Impulssi 5