Olioiden animointi on näyttämö, jolle voimme ajatella laajempia käyttötarkoituksia. Olion animointi merkitsee toimintojen lisäämistä malliin: liike, pomppoilu, törmäysten testaus jne. Tämä luku näyttää esimerkkejä luvussa Oliot luodun pallon käsittelystä ja sen pomppoiluttamisesta ruudun neljän reunan välillä.
Lopputulos on kuin seuraavassa kuvassa. Laitamme viivästysefektin näyttääksemme pallon liikeradan.
Alkupisteeksi otamme pallon koodin luvusta Kohteet. Se antaa meidän nähdä pallon ruudulla. Tämän proseduurin kuluessa lisäämme koodinpätkiä perusesimerkkiin. Uudet osat näytetään paksulla ja niissä on kommentit //LISÄÄ tai // LISÄYS ALKAA ja // LISÄYS LOPPUU. Voit myös kopioida koko koodiblokin ja korvata kyseessä olevan luokan tai metodin.
//Yhden pallon instanssin julistaminen Pallo myPallo = new Pallo(100, 100, color(255)); void setup() { smooth(); size(400, 200); //Ikkunan koko } void draw() { background(0); //Mustan taustan luominen noStroke(); //Ei ääriviivaa myPallo.display(); //Näytetään pallo } class Pallo { //Pallon ominaisuuksien julistus float x; float y; color col; //Pallon luominen Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; } //Pallon suunnittelu void display() { fill(col); ellipse(x, y, 40, 40); } }
Pallon täytyy liikkua x- ja y- akseleita pitkin. Luomme kaksi muuttujaa malliin ja olion toimintaa edustaa sen nopeus akseleita x ja y pitkin. Tämän jälkeen lisäämme olioon uuden metodin move(), jota kutsutaan ohjelman metodista draw(). Tämä metodi tulee kuitenkin, aina oliota näytettäessä, muuttamaan pallon sijaintia suhteessa sen nopeuteen. Se alustaa myös konstruktorin nopeuden kuvaavat muuttujat. Aluksi annamme niille pysyvän arvon.
class Pallo { //Pallon ominaisuuksien julistus float x; float y; float speedX; //LISÄÄ float speedY; //LISÄÄ color col; //Pallon rakentaminen Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; speedX = 2; //LISÄÄ speedY = 2; //LISÄÄ } //Pallon suunnittelu void display() { fill(col); ellipse(x, y, 40, 40); } //LISÄYS ALKAA void move() { x = x + speedX; y = y + speedY; } //LISÄYS LOPPUU }
Se kutsuu metodia move() metodista draw(). Voimme lisätä kutsun komentoon background pyyhkiäksemme ruudun jokaisen uuden kuvan jälkeen.
void draw() { background(0); //Mustan taustan luominen noStroke(); //Ei ääriviivoja //Pallon liikuttaminen ja näyttäminen myPallo.move(); //LISÄÄ myPallo.display(); }
Tällä hetkellä pallo jatkaa liikettään törmätessään ruudun seinään. Pallo pitäisi saada poukkoilemaan seinistä, joten lisäämme metodin testaaTormays, joka kääntää pallon liikesuunnan sen osuessa seinään.
class Pall { //Pallon ominaisuuksien julistaminen float x; float y; float speedX; float speedY; color col; //Pallon luominen Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; speedX = 2; speedY = 2; } //Pallon suunnittelu void display() { fill(col); ellipse(x, y, 40, 40); } void move() { x = x + speedX; y = y + speedY; } //LISÄYS ALKAA void testaaTormays() { //Pallo pomppaa törmätessään seinään if (x > width-20 || x < 20) { speedX = speedX * -1; } if (y > height-20 || y < 20) { speedY = speedY * -1; } } //LISÄYS LOPPUU }
Nyt lisätään kutsu metodiin testaaTormays metodista draw().
void draw() { //Korvataan komennolla background () näille kahdelle riville fill(0, 0, 0, 1); // Läpinäkyvä väri rect(0, 0, width, height); noStroke(); //Pallon liikuttaminen ja näyttö myPallo.move(); myPallo.testaaTormays(); //LISÄÄ myPallo.display(); }
Tässä on lopullinen koodi kaikkien näiden muutosten jälkeen.
//Yhden olion pallo instanssin luominen Pallo myPallo = new Pallo(100, 100, color(255)); void setup() { smooth(); size(400, 200); //Ikkunan koko } void draw() { fill(0, 0, 0, 1); rect(0, 0, width, height); noStroke(); //Pallon näyttö ja liikuttaminen myPallo.move(); myPallo.testaaTormays(); myPallo.display(); } class Pallo { //Pallon luokan ominaisuuksien julistaminen float x; float y; float speedX; float speedY; color col; //Pallon luominen Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; speedX = 2; speedY = 2; } //Pallon suunnittelu void display() { fill(col); ellipse(x, y, 40, 40); } void move() { x = x + speedX; y = y + speedY; } void testaaTormays() { //Pallo pomppaa törmätessään muuriin if (x > width-20 || x < 20) { speedX = speedX * -1; } if (y > height-20 || y < 20) { speedY = speedY * -1; } } }
There has been error in communication with Booktype server. Not sure right now where is the problem.
You should refresh this page.