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 » Olioiden Tag-ominaisuus
Jypelissä useimmilla olioilla (esimerkiksi GameObjectilla ja PhysicsObjectilla) on olemassa Tag-niminen ominaisuus. Tag on siitä erikoinen, että sen arvoksi voidaan antaa mitä vain - niin merkkijonoja kuin mitä vain olioita.
1. Olioiden "tunnistaminen" ja Tag-ominaisuus
Tagia voi käyttää pelin tekemisessä hyödyksi vaikkapa erilaisten peliolioiden ja fysiikkaolioiden tunnistamisessa.
Esimerkki: pelissä on paljon fysiikkaolioita, joita käytetään kentän seininä. Halutaan tunnistaa jos pelihahmo osuu johonkin monista seinistä ja vaihtaa aina sen seinän väriä mihin pelaaja osuu.
Ratkaisu: Voidaan lisätä jokaisen seinänä toimivan fysiikkaolion Tag-ominaisuuteen jokin merkkijono, josta voimme myöhemmin tunnistaa että se on juuri seinänä toimiva olio. Tämä on järkevää tehdä seiniä tekevässä aliohjelmassa:
void LuoSeina(double x, double y)
{
PhysicsObject seina = PhysicsObject.CreateStaticObject(50.0, 50.0);
seina.X = x;
seina.Y = y;
seina.Tag = "seina";
Add(seina);
}
Pelihahmon törmäyksiä käsittelevässä aliohjelmassa voidaan aina kysyä törmäyksen kohteelta sen Tag-ominaisuutta muutettuna merkkijonoksi.
Jos merkkijono täsmää antamamme tunnisteen kanssa, tiedetään että pelihahmo on törmännyt seinään ja reagoidaan siihen haluamallamme tavalla:
void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
{
if (kohde.Tag.ToString() == "seina")
{
kohde.Color = RandomGen.NextColor();
}
}
Samaa menetelmää voi käyttää jos pelissä on esimerkiksi paljon samanlaisia kerättäviä esineitä tai paljon vihollisia. Sovella esimerkkiä!
2. Miten saan vihollisen kestämään useamman osuman?
On suositeltavaa käyttää tähän ideaan mieluummin perintää, kuin tagien avulla "kikkailua", mutta joissain tilanteissa tällainenkin ratkaisu voi tulla kysymykseen.
Tag-ominaisuutta voidaan käyttää myös tallentamaan vihollisen osumapisteitä, eli kuinka monta kertaa siihen pitää osua ennen kuin se kuolee. Osumapisteet voidaan lisätä tagin perään näin:
vihollinen.Tag = "pomo5";
Nyt kun pelaajan ammukselle on lisätty törmäyskäsittelijä (ks. törmäyskäsittelijöiden lisääminen), siellä voidaan toimia seuraavasti:
void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
{
if (ammus.Tag == null) return;
string tagi = ammus.Tag.ToString();
string pomonTagi = "pomo";
if (tagi.StartsWith(pomonTagi))
{
int osumapisteet = int.Parse(tagi, pomonTagi.Length);
osumapisteet--;
if (osumapisteet <= 0)
{
// Vihollinen kuolee
kohde.Destroy();
}
else
{
// Vihollinen menettää terveyttä, mutta ei kuole
vihollinen.Tag = pomonTagi + osumapisteet;
}
}
}
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.