Skip to content

Erikoisuuksia ja eroavaisuuksia

Vesa Laakso edited this page Oct 30, 2020 · 17 revisions

Note: Because cbEnchanted is currently only used with Finnish programmers, this page will be only in Finnish. Should you need to have this list in English, please use Google Translate.

cbEnchantedin erikoisuuksia, miten cbE eroaa wanhasta CB:stä

  • Tuetut ääniformaatit / äänitiedostojen tiedostopäätteet ovat Allegron manuaalin mukaan .wav, .flac, .ogg, .it, .mod ja .xm.
  • Tuetut kuvien tiedostomuodot ovat (ainakin) BMP, PCX, TGA, JPEG ja PNG. Lisätietoja Allegron manuaalista.
  • cbE käyttää Windows-1252 merkistöä sisäisesti, joten ääkköset (ja mitkä tahansa merkit jotka eivät kuulu ASCII-arvoltaan välille 0-127) saattavat näin ollen toimia tiedostokomentojen kanssa vielä tällä hetkellä epäjohdonmukaisesti. Tekstin piirtoa varten merkkijonot muutetaan UTF-8 merkistöön joten piirtämisen pitäisi onnistua moitteettomasti, kunhan valitsemassasi fontissa on tuki kyseisille merkeille.
  • ESC sulkee ohjelman SafeExit ollessa päällä vain, kun päästään DrawScreen, WaitKey, WaitMouse tai GetKey() kutsuun. Muulloin ohjelman voi pakottaa sulkeutumaan painamalla konsoli-ikkunassa Ctrl + C näppäinyhdistelmää tai tietenkin tehtävienhallinnasta.
  • PutPixel ja PutPixel2 toimivat tismalleen samalla tavalla. Jos puskuria ei ole lukittu, ovat nämä operaatiot tuskallisen hitaita.
  • Print ja Write tulostavat konsoliin, eivät ohjelman ruudulle. Tämä on tarkoituksellista.
  • Värit, jotka ylittävät raja-arvot 0...255 tai PutPixel/GetPixel käyttämät kokonaislukuarvot, eivät toimi samalla tavalla kuin CB:n värit toimivat.
  • Objekteja ladattaessa pyöritysarvoparametria ei käytetä. Tämä johtuu siitä, että kuvat ladataan vain kerran ja nykyinen objektin kulma vain annetaan näytönohjaimelle piirrettäessä. Eli objekteja voi pyörittää mielivaltaisen tarkasti aina.
  • Virheilmoitukset ovat tarkkoja ja antavat suurilta osin mahdollisuuden yrittää ohittaa virheen. Ei siis enää "Memory Access Violation" -virheitä, vaan tarkkoja kuvauksia siitä että mikä funktio kaatui ja miksi. Jos cbE:ssä ei ole vielä tehty johonkin ominaisuuteen virheentarkistusta, kaatunee ohjelma suorilta käsin ilman virheilmoitusta tai eteen saattaa myös tulla mystinen, (Windows-buildien tapauksessa) MSVC:n oma virheilmoitus. Debug-moodissa ajaminen voi kertoa tarkempaa tietoa.
    • Edelliseen liittyen: Taulukoiden ja kuvien yli- tai aliluku/-kirjoitus kaataa ohjelman hyvin herkästi, usein ilman virheilmoitusta. Ne ovat ensimmäisiä tarkastelun kohteita jos ohjelmasi kaatuu äkkinäisesti.
  • SCREEN ei tuhoa ladattua mediaa.
  • Omia TTF-fontteja voi ladata antamalla LoadFontille .ttf tiedoston sijainnin (esim. opensans = LoadFont("OpenSans-Regular.ttf", 15))
  • Jos aiot käyttää kuvia ja niihin piirtoja, niin laita DefaultMask pois päältä kun lataat/luot kuvan. Näin kun DrawToImage-kutsu loppuu, ei kuvaa kopioida videomuistissa. Kopiointi tapahtuisi DefaultMaskin ollessa päällä jotta kuvan alphaväri voitaisiin korvata täydellä alphalla.
  • cbE:llä kuvia ladattaessa kuvien alphaväri säilyy ennallaan. PNG-kuvat kannattaa siis tehdä niin, että siinä ei käytetä maskiväriä vaan alpha laitetaan jo itse kuvaan haluttuna määränä.
  • Smooth2D asettaa RotateImage ja ResizeImage -komentojen lisäksi päälle multisamplauksen, jolloin piirtokomennot piirtyvät antialiasoituina ruudulle, kun ruudulle piirretään suoraan. Kuviin piirrettäessä multisamplaus ei toimi. Huom! Jos käyttäjän näyttökortti ei tue multisamplausta, ohjelmasi saattaa kaatua seuraavan SCREEN komennon yhteydessä, erityisesti jos yrität laittaa ohjelman koko ruudun esitystilaan.
  • Smooth2D asettaa myös fontit latautumaan antialiasoituina. Kun fontti on ladattu Smooth2D:n ollessa päällä, piirtyy sillä kirjoitettu teksti aina antialiasoituna.
  • Jos kuvien tai objektien piirtokoordinaatti on täsmälleen kahden pikselin välissä (eli liukuluku päättyy .5), niin eri koneiden näytönohjaimet voivat bugailla ja piirrellä kuvat väärin. Tätä koitetaan korjailla mutta melko hankalaa, kun ongelma ilmenee vain muutamilla koneilla.
  • Timer() palauttaa millisekunteina ajan siitä, kun cbE on pyörähtänyt käyntiin.
  • HUOM! Objektien piirto sekä kuvien maailmankoordinaatteihin piirto luultavasti bugaavat, kun piirtokoordinaatit ovat kahden pikselin välissä. Ongelmalta välttyy kun tekee alunperin kuvia, joissa on vähintään yhden pikselin täysin läpinäkyvä reunus. Aiheesta on tehty bugiraportti #119 mutta sitä on todella hankala korjata. Siksi suosittelemme, että teet kaikki maailmankoordinaattehin piirrettäväksi tarkoitetut kuvasi sellaisiksi että niissä on vähintään yhden pikselin täysin läpinäkyvä reunus välttyäksesi tältä bugilta. Animoidussa kuvissa lisäät tietenkin yhden pikselin reunuksen jokaiseen kuvasarjan osaan. Törmäykset voit sitten asettaa ObjectRange komennolla takaisin pikselintarkaksi laittamalla törmäysalueen leveyden ja korkeuden kahta pikseliä pienemmäksi kuin mitä ObjectSizeX() ja ObjectSizeY() palauttavat.

Tunnettuja bugeja ja tekemättömiä ominaisuuksia

Tekemättömät ominaisuukset on kasattu listaan tänne wikiin, ne löytyvät sivulta Toteuttamattomat ominaisuudet.

Tunnetut bugit viimeisimmässä julkaisussa (0.4.0) löytyvät täältä GitHubista. Katso myös suljetut ongelmat, jotka ovat tägätty "done-but-unreleased".