Median lataaminen

Tieto tallennetaan muuttujiin

CoolBasicissa kuvat, äänet, fontit ja objektit ladataan muuttujiin normaalilla sijoituslauseella, esim. koira = LoadImage ("dog.bmp"). Kyseinen kuva taas piirretään viitaten tuohon muuttujaan: DrawImage koira, 0, 0. Samalla tapaa käytetään myös ääniä ja muuta mediaa: muuttujilla.

Kun kuva ladataan onnistuneesti muistiin, LoadImage palauttaa ns. muistiosoittimen. Se on luku, joka kertoo mistä kohtaa muistia kyseinen kuva löytyy. CoolBasic tarvitsee tätä tietoa. Muistiosoitin säilytetään muuttujassa. Ja nimenomaan kokonaislukumuuttujassa.

Virhetilanteet

Jos median lataus epäonnistuu, latausfunktio palauttaa nollan. Voit tämän avulla tarkastaa ladattiinko media onnistuneesti:

sndBlaster = LoadSound ("Blaster.wav")

If Not sndBlaster Then MakeError "Ääntä ei voitu ladata"

Huomaa, että tämä tarkistus toimii vain, jos CoolBasicin sisäiset virheilmoitukset on kytketty pois päältä (Komento ERRORS). Muutoin CoolBasic ilmoittaa epäonnistuneista latauksista automaattisesti ja lopettaa ohjelman.

Lataus ja muisti

Joka kerta kun uusi kuva ladataan muistiin, se kuluttaa tietokoneen muistia. Huomaa, että jokainen kuva syö muistia yhtä paljon kuin 32-bittinen BMP-tiedosto (vaikka lataisit väripakattuja formaatteja). Satojen suurien kuvien lataaminen on paitsi hidasta myös iso muistissa. Siksi ohjelmoijan olisi suunniteltava pelin toteutustapa tätä seikkaa silmällä pitäen.

Jos lataat samaa kuvaa tai objektia monta kertaa, sitä ei kannata lukea suoraan kiintolevyltä. On paljon nopeampaa käyttää CloneImagea ja CloneObject-komentoa. Lisäksi näin kopioitu materiaali ei kuluta lisämuistia, ja niiden lataus on kymmeniä kertoja nopeampaa.

Äänien moninkertainen lataus ei haittaa. Vaikka lataisit kymmenen kertaa saman äänitiedoston muistiin, CoolBasic käyttää muistia vain yhden edestä. Äänien tiedostonimen ja polun on tällöin oltava sama.

Memory Access Violation

Virheilmoitus tulee silloin, kun yrität käyttää mediaa, jonka lataus on epäonnistunut tai yrität käyttää vääräntyyppistä mediaa (esim. ääntä kuvakomentojen kanssa). Voit käyttää vain muuttujaa, johon on onnistuneesti tallennettu oikea muistiosoitin.

Voit myös saada virheilmoituksen, jos media poistetaan, mutta sitä yritetään vielä käytää jossain.

Median vapauttaminen

Kun et enää tarvitse ääntä tai kuvaa, se pitäisi poistaa. Esimerkiksi pelin alkulogo, jota ei näytetä kuin ohjelman alussa, muuttuu turhaksi, jolloin se on hyvä poistaa muistin vapauttamiseksi. Tätä varten CoolBasicissa on komennot DeleteImage, DeleteFont, DeleteSound, DeleteObject jne...

Huomaa, että kloonatut objektit ovat sidoksissa master-objektiin, josta ne on tehty. Älä ikinä poista master-objektia, sen voi vaikka piilottaa näkyvistä (komento ShowObject). Jos master-objekti tuhotaan, kloonit muuttuvat epäkelvollisiksi, ja kaatavat ohjelman Memory Access Violationiin. Siksi esimerkiksi ammukset (joita tarvitaan paljon) kannattaa luoda lataamalla ensin varsinainen objekti, ja piilottaa se heti. Uudet ammukset luodaan CloneObjectilla, ja niitä voi muuten käyttää ja tuhota vapaasti.

Kaikki objektit voi kätevästi poistaa komennolla ClearObjects. Komentoa kannattaa käyttää esim. pelin pikalatauksessa tai kentän vaihdossa/pelin lopettamisessa.

Kaikki kuvat ja objektit tuhoutuvat, kun ikkunatilaa vaihdetaan SCREEN-komennolla. Tämä on DirectX-rajoitus, emmekä voi tehdä asialle mitään.

Muistivuoto tapahtuu silloin, kun muuttujan arvo kadotetaan, ja muistiosoitin menetetään. Kuva voi vielä olla muistissa, mutta ei ole mitään mahdollisuutta käsitellä sitä. Tällaista tilannetta tulisi välttää viimeiseen asti. Poikkeuksena, jos objektille on annettu elinaika (ObjectLife-komento), niin se "kuolee" automaattisesti.

CoolBasic vapauttaa kaikki käytetyt kuvat/äänet/objektit jne.. automaattisesti, kun ohjelma lopetetaan, joten sinun ei tarvitse kirjoittaa sadan rivin aliohjelmaa, jonka tehtävänä on poistaa kaikki kuvat ja objektit ennen kuin ohjelma loppuu :)


<<TAKAISIN