Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen merkki tai välilyönti vastaa tietyn kokoista ruutua pelikentässä. Voit itse päättää, minkälaista merkkiä mikäkin olio vastaa. Esimerkiksi '=' voisi olla seinä tai muu kiinteä kappale ja '*' vaikkapa tähti. 1. Kenttätiedoston pohjan lisääminen Visual Studioon Helpoin tapa on tehdä ruudukko erilliseen tekstitiedostoon, josta se sitten luetaan. Vaihtoehtoinen tapa on määrittää ruudut suoraan koodissa. HUOM! Jos teet peliä puhelimelle aloita täältä: kentän luonti content-projektin tekstitiedostosta Ruudukon lataamiseksi tiedostosta lisätään ensin kenttätiedosto projektiin, jonka jälkeen kenttä voidaan ladata koodissa. Muokataan tiedostoa vähän myöhemmin. Lisää projektiin uusi tekstitiedosto klikkaamalla projekti hiiren kakkospainikkeella, ja sen jälkeen valitsemalla Add ja New Item... Valitaan tiedostoksi tekstitiedosto Text File ja annetaan sille sopiva nimi, esimerkiksi kentta.txt. Lisätään tiedosto projektiin valitsemalla Add Tekstitiedosto tulee näkyviin Solution Explorer -ikkunaan. 2. Kentän muokkaaminen ConTextilla Nyt voit alkaa muokkaamaan tekstitiedostoa. Mikroluokissa muokkaaminen onnistuu helpoiten ConText-ohjelmalla. Avaa ConText käynnistä-valikosta, tai klikkaamalla Win + R ja kirjoittamalla context ja paina Enter. Avaa kentta.txt-tiedosto ConTextiin. Tekstitiedostoon voi nyt "piirtää" kirjoitusmerkeillä haluamansa kentän. Ruudukon leveydeksi tulee tiedoston pisimmän rivin pituus ja korkeudeksi tiedoston rivien määrä. Käytä tyhjien ruutujen merkitsemiseen välilyöntiä, älä käytä Tab-näppäintä. Vinkki: Laita päälle sarake- ja rivinumeroiden näyttö, sekä tyhjien merkkien näyttö: Sarakkeet: View» Ruler Rivit: Options» Environment options» Editor» Line Numbers Tyhjät merkit: View» Show Special Characters Vinkki: Kentän muokkaaminen voi olla helpompaa, kun painat Insert-näppäintä (tekstin korvaustila). Paina Insert-näppäintä uudelleen päästäksesi takaisiin normaaliin kirjoitustilaan. Jypelin käyttöohjeet» Ruutukentän luominen 1
Kun olet piirtänyt kentän, klikkaa tallennuskuvaketta, tai mene File» Save (Ctrl + S). Kun kenttä on valmis, palaa Visual Studioon. HUOM! Kenttien tekstitiedostot eivät kopioidu automaattisesti käännöskansioon (debug), jolloin peli kaatuu. Ratkaisu: Solution Explorerissa klikkaa kenttä-tekstitiedoston päältä hiiren oikealla» Properties» Copy to Output Directory» Copy if newer 3. Ruutukartan luominen Ruutukentän luomista varten tarvitsee koodissa luoda ruutukartta-olio (TileMap). Sopiva paikka ruutukartan luomiseksi on aliohjelma, joka luo kentän (esim. LuoKentta()). Normaalitilanne Ruutukartta-olio luodaan seuraavasti (vaihda nimen kentta.txt tilalle tiedosto, jonka liitit projektiin): TileMap ruudut = TileMap.FromFile("kentta.txt"); Puhelin & Content Importer Jos haluat luoda ruutukartta-olion Content-projektin tekstitiedostosta, se tapahtuu seuraavasti (korvaa nimi 'kentta' oman kenttätiedostosi nimellä,.txt-loppua ei tarvitse kirjoittaa) TileMap ruudut = TileMap.FromLevelAsset("kentta"); 4. Merkit vastaamaan olioita Tarkoitus on, että jokaista erilaista kirjoitusmerkkiä vastaa joku tietynlainen olio. Jokainen käyttämäsi merkki liitetään sitä vastaavan olion luovaan aliohjelmaan seuraavalla tavalla: Jos haluat määritellä olioille esimerkiksi aivot (tekoäly) tai laittaa ne eri kerroksiin, pitää tämä kohta tehdä hieman eri tavalla, ks. kohta 8. ruudut['='] = LuoPalikka; ruudut['*'] = LuoTahti; LuoPalikka sekä LuoTahti ovat sellaisia aliohjelmia, jotka eivät ota parametreja, mutta palauttavat GameObject-tyyppisen olion. Myös aliohjelma, joka palauttaa PhysicsObject-tyyppisen olion, kelpaa. Nyt täytyy vielä kirjoittaa oliot luovat aliohjelmat. Esimerkiksi LuoPalikka voisi olla seuraavanlainen: palikka.shape = Shape.Rectangle; palikka.color = Color.Gray; 2. Kentän muokkaaminen ConTextilla 2
5. Kentän lisääminen peliin Olioiden luomista varten kannattaa luoda luokkaan seuraavanlaiset attribuutit, joihin määritellään yhden ruudun koko eli se tila, mikä jokaiselle oliolle on kentässä varattu: Kun ruudut ovat taulukossa ja merkkien merkitys kerrottu, kentän voi vihdoin luoda peliin seuraavanlaisella komennolla: ruudut.insert(ruudunleveys, ruudunkorkeus); HUOM! Tämä komento muuttaa kentän kokoa! Jos siis lisäät kenttään reunoja tai zoomaat kameran näyttämään koko kentän, tee se vasta tämän jälkeen. Toinen vaihtoehto on antaa kirjaston laskea edellämainitut attribuutit jolloin kentän koko ei muutu. Tällöin käytä komentoa: ruudut.insert(); 6. Valmis esimerkki Tässä eräs ratkaisu ruutukentän tekemiseen, kun kenttä on tehty erilliseen tekstitiedostoon nimeltä "kentta.txt": using System; using Jypeli; public class Peli : PhysicsGame public override void Begin() LuoKentta(); Camera.ZoomToLevel(); void LuoKentta() TileMap ruudut = TileMap.FromFile("kentta.txt"); ruudut['='] = LuoPalikka; ruudut['*'] = LuoTahti; ruudut.insert(ruudunleveys, ruudunkorkeus); PhysicsObject LuoTahti() 5. Kentän lisääminen peliin 3
PhysicsObject tahti = PhysicsObject.CreateStaticObject(25.0, 25.0); return tahti; 7. Tekstuurin lisääminen Ruutukentän luomille olioille halutaan usein asettaa jokin kuva eli tekstuuri. Koska samaa kuvaa käytetään monta kertaa, se kannattaa ladata muuttujaan pelin alussa. Sitten samaa kuvaa voi helposti käyttää samanlaisia olioita luovassa aliohjelmassa. Piirrä tekstuuri kuvankäsittelyohjelmalla ja katso sitten ohjeet sisällön tuomisesta projektiin. Kun kuva on olemassa ja tuotu projektiin sitä voidaan käyttää seuraavasti: Ladataan kuva muuttujaan luokan alussa: using System; using Jypeli; public class Peli : PhysicsGame Image palikankuva = LoadImage( "palikka" ); protected override void Begin() //... Asetetaan ladattu kuva olioille: palikka.image = palikankuva; 8. Kun elementeille halutaan esim. kerros tai aivot Joskus ruutukentän pelielementeille halutaan määritellä jotain erikoisominaisuuksia, kuten esimerkiksi kerros (ks. Kerrokset) tai tekoälyä (ks. Aivot). Tällöin ruutukentän määrittely koodiin pitää tehdä hieman eri tavalla. Tässä esimerkki: void LataaKentta(string levelfile) TileMap ruudut = TileMap.FromFile(levelFile); ruudut.settilemethod('p', LuoPelaaja); ruudut.settilemethod('#', LuoPalikka); ruudut.settilemethod('*', LuoTahti); ruudut.execute(20, 20); 6. Valmis esimerkki 4
void LuoPelaaja(Vector paikka, double leveys, double korkeus) pelaaja = new Elephant(10, 10); pelaaja.position = paikka; pelaaja.mass = 10; AddCollisionHandler(pelaaja, OsuiMaaliin); Add(pelaaja); void LuoPalikka(Vector paikka, double leveys, double korkeus) PhysicsObject taso = PhysicsObject.CreateStaticObject( leveys, korkeus, Shape.Rectangle); taso.position = paikka; taso.image = groundimage; Add(taso); void LuoTahti(Vector paikka, double leveys, double korkeus) PhysicsObject tahti = new PhysicsObject(5, 5); tahti.position = paikka; tahti.mass = 0.005; tahti.shape = Shape.Circle; tahti.restitution = 1.0; tahti.image = tahdenkuva; AddCollisionHandler(tahti, Keraa); Add(tahti, 1); 8. Kun elementeille halutaan esim. kerros tai aivot 5