Janelas on ilmainen ja kevyt ikkunamoottori CoolBasic:lle. Sen avulla on helppoa luoda useitakin samanaikaisia ikkunoita CoolBasic-peleihin ja -ohjelmiin. Ikkunoihin voi piirtää mitä tahansa CoolBasic:n omilla piirtokomennoilla samaan tapaan kuin piirretään kuviin. Ikkunoita voi myös esimerkiksi raahata hiirellä ja niiden sisältö on mahdollista piilottaa niin, että ikkunasta näkyy vain otsikkopalkki. Moottori on tehty mahdollisimman yksinkertaiseksi ja helpoksi käyttää - monipuolisuutta ja tehokkuutta kuitenkaan unohtamatta!
Moottorin nimi tulee portugalinkielisestä sanasta janelas, joka on suomeksi ikkunat. Englanninkielinen vastine oli jo varattu.
Jotta moottori toimisi, muista linkittää se ohjelmaasi CoolBasic:n Include-käskyllä!
Sisälmysluettelo
Mikäli käytät Janelas:a pelissäsi tai ohjelmassasi, olisi mukavaa, mikäli mainitsisit pelisi tai ohjelmasi yhteydessä moottorin tekijän sekä tietysti sen, että peli tai ohjelma käyttää juuri Janelas-moottoria. Pakko ei ole, mutta kiva kuitenkin. Kiitos.
Tämä kappale sisältää pähkinänkuoressa kaiken sen, mihin Janelas pystyy ja miten se toimii. Vaikka yksin tämän kappaleen lukeminen ei riitä moottorin käyttämiseksi, on se kuitenkin syytä lukea pohjatietojen vuoksi.
Moottorin toimintaperiaate on yksinkertainen. Ikkunoiden erilaiset tiedot talletetaan taulukkoihin, joista ne käydään läpi. Ikkunoiden sisältämä teksti ja grafiikka piirretään taulukoituihin kuviin, jotka moottori liimaa ikkunoihin. Käyttäjä siis piirtää ikkunan sisällön kuvaan käyttämällä ensin DrawToWindow()-funktiota ja sen jälkeen CoolBasic:n piirtokomentoja. Edellä mainittu funktio ohjaa piirtämisen oikeaan kuvaan ja tarvittaessa tyhjentää sitä ennen kuvan aiemmasta tekstistä ja grafiikasta.
Ikkunat luodaan käyttäen NewWindow()-funktiota, jolle annetaan parametriksi ikkunassa tarvittavat tiedot. Funktio palauttaa luotuun ikkunaan viittaavan id-numeron, jonka avulla ikkunaa voidaan käsitellä myöhemmin. Numero on syytä ottaa talteen johonkin muuttujaan. Janelas päivittää ja piirtää kaikki ikkunat oikeassa järjestyksessä käytettäessä UpdateWindows()-funktiota. Tätä tulisi käyttää yhden kerran jokaisella ohjelman päälenkin suorituskerralla.
Ikkunoiden värit on mahdollista valita ikkunakohtaisesti. Värit voit määrittää ikkunassa kolmelle elementille: kehys, tausta ja otsikkopalkki. Viimeisessä käytetään kahta väriä, joista muodostetaan liukuväri.
Aivan kivuttomasti Janelas ei CoolBasic:ssa kuitenkaan toimi. Ongelmia nimittäin syntyy käytettäessä CoolBasic:n objekteja. Koska objekteja ei piirretä yksitellen, niiden sijoittaminen ikkunoihin on mahdotonta. Ikkunoidenhan on yleensä mentävä toistensa päälle - ja tällöin objektien kokonaan/osittain piilottaminen päällimäisten ikkunoiden alle alimmissa ikkunoissa on erittäin hankalaa. Lisäksi objektien maailmankoordinaatit voivat aiheuttaa ongelmia sijoitettaessa objektia ikkunaan. On myös huomattava, että myös CoolBasic:n tilemapit ovat objekteja, joten pelikenttiä ei saa ikkunaan, mikäli ne ovat tilemappeja.
Tilanne onkin ratkaistava itse pelin/ohjelman suunnittelussa niin, että ikkunat sisältävät vain sellaista materiaalia, jossa ei tarvita objekteja. Pelikentät taas piirretään ihan normaalisti ohjelmaikkunan taustalle. Jos käytät objekteja, muista myös kirjoittaa DrawGame ennen ikkunat piirtävää UpdateWindows()-funktiota.
CoolBasic:n Text-komennon kanssa on vielä yksi bugi, josta tarkemmin YCoordinateFactor-vakion yhteydessä..
Tämä kappale sisältää tiedot kaikista Janelas:n funktioista ja niiden käyttämisestä. Osa funktioista on sellaisia, joita käyttäjän ei ole normaaliolosuhteissa tarkoitus käyttää. Ne ovat kuitenkin listattu tähän siltä varalta, että joku haluaa muokata Janelas:a vähän reilummallakin kädellä. Tälläiset funktiot on merkitty tähdellä (*). Joidenkin funktioiden esimerkeissä käytetään muuttujaa nimeltä ViestiIkkuna. Tämä on vain havainnollistava esimerkki ikkunasta, joka voisi sisältää esimerkiksi pelin tai ohjelman näyttämiä viestejä pelaajalle.
Monet funktiot muuttavat (tai kutsuvat toista funktiota, joka muuttaa) CoolBasic:n piirtoväriä ja piirtokohdetta (Screen tai Image). Tälläiset funktiot on merkitty #:llä.
Huomautus id-parametrien käytöstä! Käyttäessäsi id-parametria sinun on ensin varmistuttava, että parametri on kelvollinen. Sen pitäisi olla väliltä 1 - 20 (20 on oletusraja ikkunoiden määrälle, mutta sitä voi muuttaa). Mikäli Id ei ole tältä väliltä, ohjelma kaatuu virheilmoitukseen, jossa kerrotaan muistiylivuodosta. Kun id-arvo on em. rajojen sisällä, Janelas osaa itse tarkistaa, onko ko. ikkunaa olemassa. Jos ei ole, niin ohjelma ei kaadu vaan hallitsee tilanteen. Joissakin funktioissa voit id:n sijasta käyttää ALL_WINDOWS-vakiota. Mikäli yrität käyttää tätä sellaisessa funktiossa, jossa sitä ei ole tarkoitettu käytettäväksi, ohjelma kaatuu jälleen yllä mainittuun virheilmoitukseen. Tarkkana siis id-numeroiden käytössä! (NewWindow()-funktio ei koskaan palauta sellaista id-numeroa, joka kaataisi ohjelman sen vuoksi, että id olisi rajojen ulkopuolella. Näin ollen ohjelman kaatumisriski tämän asian vuoksi on erittäin pieni).
Tämä kappale sisältää taulukon Janelas:n muuttujista ja vakioista. Muuttujien arvoa ei kannata muuttaa suoraan - tätä varten on olemassa liuta funktioita, jonka näet ylemmästä kappaleesta. Muuttujia kannattaakin käyttää ikkunoiden erilaisten arvojen selvittämiseksi. Voit esimerkiksi katsoa, pitääkö käyttäjä jotakin ikkunaa pienennettynä. Taulukosta on jätetty pois ikkunoiden värit sisältävät taulukot niiden suuren määrän vuoksi. Näitä taulukoita tuskin edes tarvitaan Janelas-moottorin ulkopuolella. Tähdellä merkittyjä muuttujia ei yleensä tarvitse käyttää.
Luethan edellisen kappaleen funktio-taulukon läpi ennen kuin alat opetella näitä muuttujia. Näin saat muuttujista kaiken irti ja osaat käyttää niitä oikein.
Janelas on kehitetty mahdollisimman kevyeksi ikkunamoottoriksi. Suurin osa raskaasta laskennasta on toteutettu niin, että kaikki täysin samalla tavalla toistuvat toimet on tehty vain kerran uutta ikkunaa luodessa ja säilötty sitten muistiin, jolloin laskentatehoa säästetään huimasti. Janelas-moottoria on testattu koneella, jossa on 2.6 Ghz Intel P4, 1.5 Gt muistia sekä Windows Xp-käyttöjärjestelmä. Janelas kykeni pyörittämään noin kolmea kymmentä ikkunaa FPS:n pyöriessä noin 60:n maissa. Kahdella kymmenellä ikkunalla FPS pysyi 75:ssä. FPS laskee uusia ikkunoita luotaessa, mutta ikkunan luomisen jälkeen se palaa ennalleen, jos ikkunoita ei ole liikaa. Testissä kuhunkin ikkunaan oli kirjoitettu tekstiä juuri ikkunan luomisen jälkeen, mutta ikkunoiden sisältöä ei kuitenkaan muutettu testin aikana. Janelas kykeni pyörittämään myös jopa 50:tä ikkunaa 75 FPS:llä, kun suurin osa ikkunoista pidettiin pinennettynä otsikkopalkin kokoiseksi! 50 oli korkein määrä ikkunoita, millä Janelas:a testattiin.
Tehovaatimukset siis eivät ole kovin suuret, jos ajatellaan, että todellisessa käytössä (jossakin pelissä tai ohjelmassa) ikkunoita olisi kerralla käytössä korkeintaan kymmenen. Janelas:n tarkasta muistin käytöstä minulla ei ole tarkkaa tietoa, mutta suuntaa antaa se, että käytössä on kirjoitushetkellä 26 eri taulukkoa, joista jokainen sisältää vähintään niin monta solua kuin ikkunoiden maksimimääräksi on annettu (oletus 20). Monet taulukot sisältävät vielä tätäkin enemmän soluja. Eli muistia käytetään kohtalaisen paljon, mutta en usko sen olevan nykykoneilla mikään ongelma. Taulukoiden sijasta olisin voinut käyttää tyyppejä, mutta tämä olisi ollut hankalampaa ja kenties raskaampaa. Taulukoissahan voidaan suoraan viitata tiettyyn soluun, kun taas tyypeissä sama olisi vähän mutkikkaampaa.
Enivei. Moottorin tehonkäytössä on siis otettu huomioon se, että suurimmat tehot tarvitaan itse peliin/ohjelmaan niin hyvin kuin suinkin.
Koodaus, suunnittelu, ohjeet: Jarkko 'Jare' Linnanvirta, K-pelit (www.kpelit.se8.org, kpelit2003@hotmail.com)
Palautetta saa lähettää. Uusia päivityksiä kannattaa vilkuilla osoitteesta www.janelas.se8.org (tai sitten koti.mbnet.fi/jare1/janelas/).
Mikäli sinulla on ideoita moottorin kehittämiseksi, ota yhteyttä ja voit saada nimesi tähän Tekijät & palaute -kappaleeseen (tulevaan) kohtaan Ideat.
Janelas on myös osa CoolBasic Software Development Kit:ä - sen lisäksi, että on saatavilla myös tästä SDK:sta irrallisena. CB SDK on ilmainen funktiokirjasto CoolBasic:lle, joka sisältää muun muassa käyttöliittymien tekemistä helpottavia funktioita sekä paljon muuta hyödyllistä ja mieleenkiintoista. Kannattaa käydä katsomassa, koti.mbnet.fi/cbsdk/.
Janelas:a saa käyttää ja levittää vapaasti. Toivomus olisi kuitenkin, että lisäisit peliisi tai ohjeelmasi Janelas:n tekijän nimen ja web-osoitteen, sekä tietysti Janelas-moottorin nimen. Kiitos!