Oman luokan periminen¶
Oma oliotyyppi tehdään perimällä uusi luokka jostakin Jypelin luokasta,
useimmiten PhysicsObject-luokasta. Perivä luokka saa kaikki kantaluokan
ominaisuudet (Position, Color, Mass, ...) ja aliohjelmat (Push,
Destroy, ...), ja niiden lisäksi siihen kirjoitetaan omat lisäykset.
Pienin mahdollinen oma luokka¶
using System;
using Jypeli;
class Vihu : PhysicsObject
{
public Vihu(double leveys, double korkeus)
: base(leveys, korkeus)
{
Color = Color.Red;
Shape = Shape.Triangle;
}
}
public class Peli : PhysicsGame
{
public override void Begin()
{
Vihu vihu = new Vihu(50, 50);
vihu.Position = new Vector(100, 0);
Add(vihu);
}
}
Rivi class Vihu : PhysicsObject tarkoittaa: Vihu on PhysicsObject.
Kaikki, mikä toimii PhysicsObject-oliolle, toimii myös Vihu-oliolle:
Add, Position, törmäykset, painovoima ja niin edelleen.
Luokan sisällä rivi Color = Color.Red; tarkoittaa samaa kuin
vihu.Color = Color.Red; pelin puolella. Luokan sisällä oliolla ei ole
nimeä, vaan sen omiin ominaisuuksiin viitataan suoraan (tai sanalla this).
Rakentaja ja base¶
Rakentaja on aliohjelma, joka ajetaan, kun olio luodaan new-sanalla.
Sillä on sama nimi kuin luokalla eikä lainkaan paluutyyppiä.
Fysiikkaolio tarvitsee luotaessa leveyden ja korkeuden. Ne välitetään
kantaluokalle rivillä : base(leveys, korkeus), joka kutsuu
PhysicsObject-luokan omaa rakentajaa. Ilman base-riviä kääntäjä
ilmoittaa virheen There is no argument given that corresponds to the
required parameter 'width'.
base-kutsun parametrien pitää vastata jotakin kantaluokan rakentajaa.
PhysicsObject-luokalla niitä on useita:
: base(leveys, korkeus) // leveys ja korkeus
: base(leveys, korkeus, Shape.Circle) // ja muoto
: base(leveys, korkeus, x, y) // ja paikka
: base(animaatio) // koko kuvasta tai animaatiosta
Oman rakentajan parametrien ei tarvitse olla samat kuin kantaluokan. Jos
kaikki vihut ovat samankokoisia, koon voi kirjoittaa suoraan base-kutsuun,
jolloin oliota luotaessa ei anneta mitään:
Omia parametreja, kuten elämien määrää, voi lisätä vapaasti; ks. Omat ominaisuudet ja metodit.
Mistä luokasta peritään¶
| Kantaluokka | Milloin | Huomaa |
|---|---|---|
PhysicsObject |
Olio törmää ja siihen vaikuttaa painovoima. Tavallisin valinta. | |
GameObject |
Olio ei tarvitse fysiikkaa: koriste, tähtäin, paikallaan pysyvä kerättävä esine. Kevyempi kuin fysiikkaolio. | Ei törmäyksiä, joten AddCollisionHandler ei toimi. |
PlatformCharacter |
Tasohyppelyn hahmo, jolla on Walk ja Jump. |
Tarvitsee using Jypeli.Assets;. |
Widget |
Käyttöliittymän osa, joka piirtyy ruudun päälle. | Ks. Omat käyttöliittymäkomponentit. |
Esimerkiksi tasohyppelyn pelaaja:
using Jypeli.Assets;
class Pelaaja : PlatformCharacter
{
public Pelaaja(double leveys, double korkeus)
: base(leveys, korkeus)
{
Color = Color.Blue;
}
}
Oman luokan voi periä myös omasta luokasta: class Pomo : Vihu on vihu,
jolla on jotain lisää. Mitä kantaluokat osaavat, on koottu sivulle
Oliotyypit.
Mihin luokka kirjoitetaan¶
Luokka kirjoitetaan toisen luokan ulkopuolelle, ei Peli-luokan eikä
minkään aliohjelman sisään. Kaksi tapaa:
- Oma tiedosto, esimerkiksi
Vihu.cssamassa projektissa. Riderissa klikkaa projektia hiiren oikealla, valitse Add › Class ja anna nimeksiVihu. Rider tekee tiedoston, jonka alkuun lisätäänusing Jypeli;. Tämä on selkein tapa, kun luokka on pitkä. - Sama tiedosto kuin
Peli-luokka, sen yläpuolelle tai alapuolelle. Riittää pienelle luokalle.
using Jypeli;
class Vihu : PhysicsObject
{
// vihun omat asiat
}
public class Peli : PhysicsGame
{
public override void Begin()
{
// vanha tuttu Begin
}
}
Jos Peli-luokan tiedostossa on namespace-rivi, oma luokka kirjoitetaan
sen alapuolelle samaan tapaan kuin Peli-luokka.
Yleisiä virheitä¶
- There is no argument given that corresponds to the required parameter
'width':
base-kutsu puuttuu tai sen parametrit eivät vastaa mitään kantaluokan rakentajaa. - The type or namespace name 'PhysicsObject' could not be found:
tiedoston alusta puuttuu
using Jypeli;. - Kääntäjä valittaa aaltosuluista tai puolipisteistä luokan kohdalla:
luokka on vahingossa aliohjelman sisällä. Siirrä se
Peli-luokan ulkopuolelle. - Olio ei näy:
Add(vihu)puuttuu, aivan kuten muillakin olioilla.
Katso myös¶
- Omat ominaisuudet ja metodit: elämät, nopeus ja olion omat aliohjelmat.
- Olion käyttäminen pelissä: luominen, törmäykset ja tyypin tunnistaminen.
- Oliotyypit: mitä
GameObject,PhysicsObjectjaPlatformCharacterosaavat. - Miten Jypeli-peli toimii: attribuutit,
Beginja omat aliohjelmat.