Arpominen void draw ( ) -lohkossa.
Tehdään ensin ohjelma, joka arpoo yhden kokonaisluvun väliltä -100...100.
Koska arpominen tehdään heti ohjelman alussa, niin arpominen tehdään vain kerran. Entä jos haluamme arpoa lukuja jatkuvasti. Siirretään arpomiskomento void draw () -lohkoon, niin arpominen tapahtuu jatkuvasti.
Jotta ohjelmasta tulisi järkevä, niin myös komento background(255); on siirrettävä void draw (); -lohkoon ennen text();-komentoa. Tällöin ikkuna putsataan aina ennen uuden luvun tulostamista. Muuten kävisi niin, että arvotut tekstit tulostuisivat päällekkäin.
Lisäksi arpominen tapahtuu vielä liian nopeasti. Voimme hidastaa ikkunan päivitystä komennolla frameRate(taajuus); komennolla. Komento frameRate(1); päivittää ikkunaa yhden sekunnin välien, jolloin arpominen on paljon hitaampaa. Jos haluat arpomisen kahden sekunnin välien, niin silloin laita komento muotoon frameRate(0.5);. Vastaavasti komento frameRate(2); arpoo luvun puolen sekunnin välein. Sanotaan, että taajuus ja värähdysaika ovat toistensa käänteisarvoja. Komento frameRate(taajuus); laitetaan void setup () -lohkoon.
Onko mahdollista arpoa vain kerran void draw () -lohkossa? Tutkitaan seuraavaa esimerkkiä.
Komennolla noLoop(); voidaan estää ikkunan päivitys eli tällöin void draw (); -lohko suoritetaan vain kerran.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
int luku = -100+round(random(200));
// Arvotaan kokonaisluku väliltä [-100,100]
void setup() {
size(400,200); // Asetetaan ikkunan koko
background(255); // Asetetaan taustaväri valkoiseksi
fill(0); // Asetetaan tekstin väri mustaksi
textSize(20); // Asetetaan tekstin kooksi 20
}
void draw() {
text(luku,10,100);// Tulostetaan arvottu luku
}
Koska arpominen tehdään heti ohjelman alussa, niin arpominen tehdään vain kerran. Entä jos haluamme arpoa lukuja jatkuvasti. Siirretään arpomiskomento void draw () -lohkoon, niin arpominen tapahtuu jatkuvasti.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(400,200); // Asetetaan ikkunan koko
fill(0); // Asetetaan tekstin väri mustaksi
textSize(20); // Asetetaan tekstin kooksi 20
frameRate(1); // Muutetaan ikkunan päivitysnopeus arvoon 1 Hz
}
void draw() {
int luku = -100+round(random(200)); // Arvotaan kokonaisluku
background(255); // Asetetaan taustaväri valkoiseksi
text(luku,10,100);// Tulostetaan arvottu luku
}
Jotta ohjelmasta tulisi järkevä, niin myös komento background(255); on siirrettävä void draw (); -lohkoon ennen text();-komentoa. Tällöin ikkuna putsataan aina ennen uuden luvun tulostamista. Muuten kävisi niin, että arvotut tekstit tulostuisivat päällekkäin.
Lisäksi arpominen tapahtuu vielä liian nopeasti. Voimme hidastaa ikkunan päivitystä komennolla frameRate(taajuus); komennolla. Komento frameRate(1); päivittää ikkunaa yhden sekunnin välien, jolloin arpominen on paljon hitaampaa. Jos haluat arpomisen kahden sekunnin välien, niin silloin laita komento muotoon frameRate(0.5);. Vastaavasti komento frameRate(2); arpoo luvun puolen sekunnin välein. Sanotaan, että taajuus ja värähdysaika ovat toistensa käänteisarvoja. Komento frameRate(taajuus); laitetaan void setup () -lohkoon.
Onko mahdollista arpoa vain kerran void draw () -lohkossa? Tutkitaan seuraavaa esimerkkiä.
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(400,200); // Asetetaan ikkunan koko
fill(0); // Asetetaan tekstin väri mustaksi
textSize(20); // Asetetaan tekstin kooksi 20.
noLoop(); // Komento estää ikkunan päivityksen
}
void draw() {
int luku = -100+round(random(200)); // Arvotaan kokonaisluku
background(255); // Valkoinen taustaväri
text(luku,10,100);// Tulostetaan arvottu luku
}
Komennolla noLoop(); voidaan estää ikkunan päivitys eli tällöin void draw (); -lohko suoritetaan vain kerran.