Det er to nye funksjoner som brukes i dette eksemplet:
Det er to nye funksjoner som brukes i dette eksempelet:
*`bool AnimationWindow::should_close()`: Returnerer `false` fram til brukeren lukker vinduet, og deretter `true`. `while`-løkken sørger for at programmet fortsetter fram til den er avsluttet.
*`bool AnimationWindow::should_close()`: Returnerer `false` fram til brukeren lukker vinduet, og deretter `true`. `while`-løkken sørger for at programmet fortsetter fram til den er avsluttet.
*`void AnimationWindow::next_frame()`:
*`void AnimationWindow::next_frame()`: Funksjonen gjør flere operasjoner:
1. Bildet du har tegnet blir vist på skjermen
2. Blidet blir tømmet slik at du kan tegne neste bildet i animasjonen
3. Venter litt slik at vinduet ikke tegner flere enn 60 bilder per sekund
<imgsrc="../../images/animation_1.png"alt="Bilde som viser en kurve tegnet med draw_arc funksjonen og endret farge"style="max-width:600px; width:100%;"/>
<imgsrc="../../images/animation_1.png"alt="Bilde som viser en kurve tegnet med draw_arc funksjonen og endret farge"style="max-width:600px; width:100%;"/>
Siden det nå er mulig å tegne flere bilder på rad kan vi prøve å lage en enkel animasjon, for eksempel en firkant som beveger mot høyre siden av skjermen. Vi gjør dette ved å øke x-koordinatet hver gang vi tegner et nytt bilde:
```c++
#include"std_lib_facilities.h"
#include"AnimationWindow.h"
intmain()
{
AnimationWindowwindow;
intxPosition=0;
while(!window.should_close()){
xPosition=xPosition+2;
Pointposition{xPosition,100};
window.draw_rectangle(position,100,100);
window.next_frame();
}
return0;
}
```
Merk at hele bildet må tegnes på nytt etter hver gang `next_frame()` funksjonen blir kallet. Det er ikke mulig å beholde en del av bildet og tegne bare det som endrer seg.
Eksemplet er litt
Når du kjører eksempelet forsvinner firkanten etterhvert. Vi kan løse dette ved å legge til et if setning:
```c++
```c++
#include"std_lib_facilities.h"
#include"std_lib_facilities.h"
...
@@ -59,3 +85,31 @@ int main()
...
@@ -59,3 +85,31 @@ int main()
return0;
return0;
}
}
```
```
Og for moro skyld kan vi sørge for at den bare flytter seg når mellomrom på tastaturen holdes ned (du finner mer informasjon om dette på input siden):
@@ -10,14 +12,79 @@ Et «callback» er en funksjon som kalles etter en spesifikk hendelse har inntru
...
@@ -10,14 +12,79 @@ Et «callback» er en funksjon som kalles etter en spesifikk hendelse har inntru
## GUI Elementer
## GUI Elementer
Hver GUI element som kan brukes i en AnimationWindow er definert i sin egen klasse. Det vil si at når du for eksempel ønsker å vise en knapp i vinduet, lager du en instans av `TDT4102::Button` klassen. I tillegg er det nødvendig å