Ruudun uudelleenpiirtäminen

Tavallisesti jokaisen askeleen lopussa huone piirretään uudestaan ruudulle. Joissain harvoissa tapauksissa haluat kuitenkin piirtää huoneen uudelleen muissa ajankohdissa. Tämä tapahtuu, kun ohjelmasi ottaa vallan. Uudelleenpiirtäminen voi olla toivottua esimerkiksi ennen kuin ohjelma nukkuu pitkän ajan. Lisäksi, kun koodisi näyttää viestin ja haluaa odottaa pelaajan näppäimen painallusta, tarvitset uudelleenpiirtämisen tässä välissä. Tämän hoitamiseen on olemassa kaksi funktiota.

screen_redraw() Piirtää huoneen uudelleen kutsumalla kaikkia piirtotapahtumia.
screen_refresh() Päivittää ruudun käyttäen senhetkistä huoneen kuvaa (ei suorittamalla piirtotapahtumia).

Ymmärtääksesi jälkimmäisen funktion, sinun on ymmärrettävä yksityiskohtaisemmin, kuinka piirtäminen toimii sisäisesti. Sisäisesti on olemassa kuva, johon kaikki piirtäminen tapahtuu. Tämä kuva ei ole näkyvä ruudulla. Vain askeleen lopussa, kun kaikki piirtäminen on tapahtunut, ruudun kuva korvataan tällä sisäisellä kuvalla. (Tätä kutsutaan kaksoispuskuroinniksi.) Ensimmäinen funktio piirtää uudelleen sisäisen kuvan ja sitten päivittää ruudun kuvan. Jälkimmäinen funktio vain päivittää kuvan ruudulla.

Nyt sinun tulisi myös ymmärtää, miksi et voi käyttää piirtotoimintoja tai -funktioita muualla kuin piirtotapahtumissa. Ne piirtävät asioita sisäiseen kuvaan, mutta nämä eivät ole näkyviä ruudulla. Sitten kun piirtotapahtumat suoritetaan, ensin piirretään huoneen tausta, jolloin tyhjennetään kaikki, mitä piirsit sisäiseen kuvaan. Kun kuitenkin käytät screen_refresh()-funktiota piirtämisen jälkeen, päivitetty kuva tulee näkyviin ruudulla. Niinpä esimerkiksi skripti voi piirtää jotain tekstiä ruudulle, kutsua päivitysfunktiota ja odottaa sitten pelaajan näppäimen painallusta, kuten seuraavassa koodinpätkässä.

{
  draw_text(room_width/2,100,'Paina mitä tahansa näppäintä jatkaaksesi.');
  screen_refresh();
  keyboard_wait();
}

Huomaa, että kun piirrät johonkin muuhun tapahtumaan kuin piirtotapahtumaan, piirrät yksinkertaisesti kuvaan, et kuvakulmaan! Käyttämäsi koordinaatit ovat siis samat kuin kuvakulmia ei olisikaan. Ole varovainen käyttäessäsi tätä tekniikkaa. Varmista, että ymmärrät sen ensin ja käsität, että ruudun päivittäminen vie jonkin verran aikaa.

Kun piirrät huoneen itse, voi olla hyödyllistä, ettet anna sen tulla piirretyksi automaattisesti lainkaan. Voit esimerkiksi haluta piirtää huoneen van joka viides askel. Voit käyttää tähän seuraavia funktioita:

set_automatic_draw(value) Määrittää, piirretäänkö huone automaattisesti uudelleen (tosi, oletus) vai ei (false).

Lopuksi on olemassa funktio, jonka avulla voit asettaa, synkronoidaanko piirtäminen näytön virkistystaajuuden kanssa:

set_synchronization(value) Määrittää, synkronoidaanko piirtäminen näytön virkistystaajuuden kanssa.

Voit myös pakottaa piirtämisen odottamaan seuraavaa pystysuuntaista synkronointia käyttäen seuraavaa funktiota:

screen_wait_vsync() Odottaa näytön seuraavaa pystysuuntaista synkronointia.