Omat tyypit

Tyypit ovat hyvästä, käytä tyyppejä

CoolBasicin tyypeillä voit muodostaa kokoelman ammuksia, vihollisia, botteja, mitä vain. Tämä on vieläkin yksinkertaisempi tapa hallita suurta joukkoa erilaisia kohteita kuin taulukointi.

Ohjelman alussa tyyppi pitää määritellä. Se onnistuu TYPE...END TYPE-lohkossa, jonka sisään kirjoitetaan FIELD-sanojen avulla lista muuttujia. Aina kun uusi kokoelman jäsen luodaan, se perii kaikki nämä muuttujat, ja ne ovat käytettävissäsi - jokaiselle objektille on yksilölliset muuttujat, vaikkakin kaikilla jäsenillä on saman nimiset muuttujat.

Kokoelmat muodostavat ns. linkitettyjä listoja, joiden keskeltä, lopusta ja alusta voi poistaa jäseniä ilman, että väliin jää tyhjiä kohtia. Tämä ei onnistu taulukoissa siirtämättä taulukon elementtejä täyttämään tyhjäksi muodostunut paikka. Esimerkiksi:

Alussa on tällainen lista: "1, 2, 3, 4, 5". Kun poistat jäsenen kolme, lista näyttääkin tällaiselta: "1, 2, 4, 5". Tämä on ihanteellinen tapa hallita erilaisia efektejä tai liikkuvia kohteita.

Nyt meni yli hilseen

Otetaan esimerkki: Kuvitellaan, että pelissäsi on plasmakivääri, joka ampuu nopeita sarjoja kuumennettua plasmaa. Aina kun painat liipaisinta, luodaan uusi ammus, joka liikkuu eteenpäin, kunnes törmää johonkin. Nyt sinun pitäisi jotenkin hallita kaikkia ammuksia: liikuttaa niitä ja tarkastaa törmäävätkö ne johonkin. Tämän voisi tehdä taulukoilla, mutta se on tyyppeihin verrattuna työlästä.

Oletetaan, että haluat toteuttaa ammukset objekteilla, mikä on yksinkertaisin tapa. Aina kun ammus luodaan, pitää siis luoda uusi ammusobjekti, asettaa sille törmäys, sijoittaa ja kohdistaa se oikein jne. Tällaisen ammusjärjestelmän perusta on tietysti kokoelma (tyyppi). Luodaan sellainen ohjelman alussa:

Type AMMUKSET
    Field obj
End Type

Nyt meillä on kokoelma, jonka nimi on "AMMUKSET". Siinä on yksi kenttä, nimeltään obj. Aina kun uusi ammus lisätään kokoelmaan, se saa oman obj-muuttujansa, johon talletetaan objektin kopio. Pelin alussa lataat ns. master-objektin (ammus-kuva), ja piilotat sen (ShowObject). Master-object on ladattu muuttujaan "ammus".

Uusi jäsen lisätään kokoelmaan komennolla NEW. Koodina se tapahtuu seuraavasti (tämä siis aina kun uusi ammus luodaan):

pati.AMMUKSET = New (AMMUKSET)
pati\obj = CloneObject (ammus)

'Asetetaan patin törmäys kenttään
SetupCollision pati\obj, kartta, 2, 4, 1

'Aseta pati samaan paikkaan missä pelaaja on
CloneObjectPosition pati\obj, pelaaja
CloneObjectOrientation pati\obj, pelaaja
ResetObjectCollision pati\obj

Tämä koodi luo uuden jäsenen. Se lisätään aina listan viimeiseksi. Kiinnitä huomiota erityisesti kahteen ensimmäiseen riviin. Lisäksi muuttujan "pati" tyypiksi pitää määritellä kokoelma. Siksi muuttujan perään kirjoitetaan piste ja kokoelman nimi. Tätä ei tarvitse kirjoittaa jatkossa.

Tyyppimuuttujan kenttiin pääsee käsiksi \-merkillä. Käytät muuten muuttujaa normaaliin tapaan.

Listan läpikäyminen

Oletkin jo tutustunut For...Next-rakenteeseen (jos et ole, tee se nyt ja palaa tänne myöhemmin). Sen avulla voidan helposti käydä läpi kaikki taulukon jäsenet. Samaan tapaan voidaan käydä läpi myös kaikki kokoelman jäsenet. Rakenne muuttuu vain hieman toisennäköiseksi:

For pati.AMMUKSET = Each AMMUKSET
    MoveObject pati\obj, 1
Next pati

Oheinen koodi liikuttaa KAIKKIA ammuksia eteenpäin yhdellä. Samalla voit tarkastaa jokaisen ammuksen törmäyksen, ja tarvittaessa tuhoamaan sen (DeleteObject ja sitten Delete pati). Listan voi tuhota näin:

For pati.AMMUKSET = Each AMMUKSET
    DeleteObject pati\obj
    Delete pati
Next pati

On erittäin tärkeää, että muistat vapauttaa jäseniin sidotun median. Muuten niihin ei pääse koskaan käsiksi ja se syö tietokoneen muistia, koska niitä ei voi vapauttaa.

Tyyppien ominaisuuksia

Field-sanalla määritellään kokoelman muuttujat. Nämä voivat olla myös desimaali- tai merkkijonotyyppisiä. Esim. Field x# määrittää desimaalikentän. Sitä kutsutaan \x tai \x#.

Kun haluat poistaa jäsenen (törmäyksen sattuessa), komennat vain Delete pati (edellisen esimerkin mukaan). Sitä ennen on hyvä poistaa objekti muistista: DeleteObject pati\obj

Uusi jäsen lisätään aina listan perään. Voit liikkua listan sisällä Before() ja After() -funktioilla. Esim. Pati = Before(Pati). Lisää tietoa kyseisten komentojen oppaasta.

Voit kerralla siirtyä listan alkuun tai loppuun First() ja Last() -funktioilla. Esim. Pati = First(AMMUKSET). Lisää tietoa kyseisten komentojen oppaasta.

Et voi siirtyä listan ulkopuolelle. Muuten ohjelma kaatuu muistivuotoon. Siten, jos osoitin on listan viimeisessä jäsenessä, et voi komentaa Pati=After(Pati), ja käyttää olematonta jäsentä. Voit estää tämän testaamalla, onko lista lopussa: If After(Pati)<>NULL Then ON_OLEMASSA Else EI_OLEMASSA.

Voit siirtää elementtejä paikasta toiseen Insert-komennolla. Uusi (ja siten viimeinen) listan jäsen voidaan siirtää ensimmäiseksi: Insert Pati, First(AMMUKSET) tai vaikkapa Insert Pati, After(First(AMMUKSET)). Tällainen kikkailu on edistyneemmille käyttäjille.


<<TAKAISIN